0 / 0 / 0
Регистрация: 14.11.2021
Сообщений: 20
1
C/C++

Вычислить кусочно-линейную функцию

23.12.2021, 16:00. Показов 937. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть формула. Написал код на сопроцессоре. До этого там тоже вычисляется код. Но он верный.
Не могу понять почему не сходятся результаты. Помогите пожалуйста. И буду вам очень благодарен. Если вы сделаете это не вставками а модулем ассмеблерным. То есть ответ двумя файлами cpp и asm . Извините что много прошу просто у меня ни то ни другое не получается. Помогите пожалуйста. Буду очень признателен

Название: help.png
Просмотров: 35

Размер: 9.3 Кб

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#define _USE_MATH_DEFINES
#define _CRT_SECURE_NO_WARNINGS
 
#include <iostream>
 
using namespace std;
 
 
double calc(double x)
{
    double buffer;
    int C2 = 2;
    int C6 = 6;
    __asm
    {
        finit
 
        fld x               // ST(0) = x
        fld ST              // ST(0) = x, ST(1) = x
 
        fmul ST, ST(1)      // ST(0) = x ^ 2, ST(1) = x
        fmul ST, ST         // ST(0) = x ^ 4, ST(1) = x //сразу нельзя?
 
 
        fld1                // ST(0) = 1, ST(1) = x ^ 4, ST(2) = x
        fsub ST(1), ST      // ST(0) = 1, ST(1) = x ^ 4 - 1, ST(2) = x
 
 
        fxch ST(1)          // ST(0) = x ^ 4 - 1, ST(1) = 1, ST(2) = x
        fabs                // ST(0) = abs(x ^ 4 - 1), ST(1) = 1, ST(2) = x
        fyl2x               // ST(0) = log2(abs(x ^ 4 - 1)), ST(1) = x
 
        fld1                // ST(0) = 1, ST(1) = log_2(abs(x ^ 4 - 1)), ST(2) = x
        fld st(2)           // ST(0) = x, ST(1) = 1, ST(2) = log_2(abs(x ^ 4 - 1)), ST(3) = x
        fsin                // ST(0) = sin(x), ST(1) = 1, ST(2) = log_2(abs(x ^ 4 - 1)), ST(3) = x
        fimul C2            // ST(0) = 2sin(x), ST(1) = 1, ST(2) = log_2(abs(x ^ 4 - 1)), ST(3) = x
        fmul ST, ST(2)      // ST(0) = 2sin(x)*log_2(abs(x ^ 4 - 1)), ST(1) = 1, ST(2) = log_2(abs(x ^ 4 - 1)), ST(3) = x
        faddp ST(1), ST     // ST(0) = 2sin(x)*log_2(abs(x ^ 4 - 1)) + 1 = (*), ST(1) = log_2(abs(x ^ 4 - 1)), ST(2) = x
 
        ; Вычисляем знаменатель
        fldpi               // ST(0) = PI, ST(1) = (*), ST(2) = log_2(abs(x ^ 4 - 1)), ST(3) = x
        fimul C2            // ST(0) = 2PI, ST(1) = (*), ST(2) = log_2(abs(x ^ 4 - 1)), ST(3) = x
 
        fxch ST(3)          // ST(0) = x, ST(1) = (*), ST(2) = log_2(abs(x ^ 4 - 1)), ST(3) = 2PI
        fimul C2            // ST(0) = 2x, ST(1) = (*), ST(2) = log_2(abs(x ^ 4 - 1)), ST(3) = 2PI
        fsin                // ST(0) = sin(2x), ST(1) = (*), ST(2) = log_2(abs(x ^ 4 - 1)), ST(3) = 2PI
        fldpi               // ST(0) = PI, ST(1) = sin(2x), ST(2) = (*), ST(3) = log_2(abs(x ^ 4 - 1)), ST(4) = 2PI
        fidiv C6            // ST(0) = PI/6, ST(1) = sin(2x), ST(2) = (*), ST(3) = log_2(abs(x ^ 4 - 1)), ST(4) = 2PI
        faddp ST(1), ST     // ST(0) = PI/6 + sin(2x), ST(1) = (*), ST(2) = log_2(abs(x ^ 4 - 1)), ST(3) = 2PI
        fdivp ST(3), ST     // ST(0) = (*), ST(1) = log_2(abs(x ^ 4 - 1)), ST(2) = 2PI/(PI/6 + sin(2x)) = (**)
        fxch ST(2)          // ST(0) = (**), ST(1) = log_2(abs(x ^ 4 - 1)), ST(2) = (*)
        fdivp ST(2), ST     // ST(0) = log_2(abs(x ^ 4 - 1)), ST(1) = (*)/(**) = (***)
 
        fld1                // ST(0) = 1, ST(1) = log_2(abs(x ^ 4 - 1)), ST(2) = (*)/(**) = (***)
        fpatan              // ST(0) = atan(log_2(abs(x ^ 4 - 1))/1), ST(1) = (***)
        fmul ST, ST         // ST(0) = atan^2(log_2(abs(x ^ 4 - 1))/1), ST(1) = (***)
        fsubp st(1), st     // ST(0) = (***) - atan^2()
                            // st(0) - result
    }
}
 
double condition(double x) {
    double upLimit = 0.5;
    int plus = 4;
    __asm {
        finit
        fldz // ST(0) = 0
        fld x // ST(0) = x, ST(1) = 0
        fcom
        fstsw ax
        sahf
        jb CASE_1
 
        xor ax, ax
        fld upLimit // ST(0) = 0,5 ; ST(1) = x, ST(2) = 0
        fcom
        fstsw ax
        sahf
        ja CASE_2
 
        //2^x + 3
        fxch ST(1)// ST(0) = x ; ST(1) = 0.5, ST(2) = 0
        f2xm1 // ST(0) = 2^x - 1 ; ST(1) = 0.5, ST(2) = 0
        fld plus //ST(0) = 4 , ST(1) = 2^x - 1 ; ST(2) = 0.5, ST(3) = 0
        fadd ST(1), ST(0) // ST(0) = 4 , ST(1) = 2^x + 3 ; ST(2) = 0.5, ST(3) = 0
        fxch ST(1) // ST(0) = 2^x + 3 , ST(1) = 4 ; ST(2) = 0.5, ST(3) = 0
        jmp THE_END
 
        CASE_2:
        fld1 //ST = 1,  ST(1) = 0,5 ; ST(2) = x, ST(3) = 0
        fxch ST(2)//ST = x, ST(1) = 0, 5; ST(2) = 1, ST(3) = 0
        fxch ST(1)//ST = 0,5, ST(1) = x; ST(2) = 1, ST(3) = 0
        fxch ST(2)//ST = 1, ST(1) = x; ST(2) = 0,5, ST(3) = 0
 
        fpatan // ST = atan(x),  ST(1) = x ; ST(2) = 0,5, ST(3) = 0
        fld1;//ST(0) = 1, ST = atan(x),  ST(1) = x ; ST(2) = 0,5, ST(3) = 0
        fmul ST(0), ST(1)// ST(0) = atan(x), ST = atan(x), ST(1) = 0, 5; ST(2) = x, ST(3) = 0
        fmul ST(0), ST(1)// 
        fmul ST(0), ST(1) // ST(0) = atan(x)^3, ST = atan(x), ST(1) = 0, 5; ST(2) = x, ST(3) = 0
        jmp THE_END
 
        CASE_1:
        fcos // ST(0) = cos(x), ST(1) = 0
        fmul ST(0), ST(0)
        jmp THE_END
        THE_END:
 
 
 
    }
}
 
int main() {
 
    double x, resultC, resultA, resultD;
    cout << "Input x -> ";
 
    cin >> x;
 
    cout << endl << "The first task:" << endl;
 
    resultC = (2 * sin(x) * (log2(abs(pow(x, 4) - 1))) + 1) / ((2 * M_PI) / (sin(2 * x) + (M_PI / 6))) - pow(atan(log2(abs(pow(x, 4) - 1))), 2);
 
    cout << "(C++) result -> " << resultC << endl;
 
    resultA = calc(x);
 
    cout << "(Assembler) result -> " << resultA << endl;
 
    resultD = condition(x);
 
    cout << "task 2 -> " << resultD << endl;
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.12.2021, 16:00
Ответы с готовыми решениями:

Вычислить значения кусочно-линейной функции
Составьте программу, которая для x∈ с шагом 1 вычисляет значения функции

Вычислить кусочно-линейную функцию
решить систему

Как описать кусочно-линейную периодическую функцию?
Добрый день. Кусочно-линейную функцию я описал, см. прикрепленный рисунок. Как ее сделать...

Как сделать кусочно линейную интерполяцию?
Задание сделать кусочно-линейную интерполяцию следующих с исходными данными х и y. Нужно сделать...

4
0 / 0 / 0
Регистрация: 14.11.2021
Сообщений: 20
23.12.2021, 18:17  [ТС] 2
Кто нибудь, помогите пожалуйста
0
Модератор
Эксперт по электронике
8561 / 4409 / 1655
Регистрация: 01.02.2015
Сообщений: 13,699
Записей в блоге: 9
23.12.2021, 18:45 3
Ветвление
Электронный учебник глава 11

Инструкции сравнения берите те, которые сразу изменяют флаги CPU, и выполняйте условный переход, как при сравнении беззнаковых чисел - т.е. один из jb/jbe/je/jae/ja

Для сравнения можете загружать константы из переменных или fldz (загрузка 0) или последовательность для 0,5
Assembler
1
2
3
4
fld1
fld1
fadd st(0), st(0)
fdivp st(1), st(0)
0
0 / 0 / 0
Регистрация: 26.12.2021
Сообщений: 2
26.12.2021, 12:56 4
ФедосеевПавел, Павел, каким образлм брать com, если я работаю с сопроцессором, а там fcom только
0
Модератор
Эксперт по электронике
8561 / 4409 / 1655
Регистрация: 01.02.2015
Сообщений: 13,699
Записей в блоге: 9
26.12.2021, 13:31 5
О каком com речь?
0
26.12.2021, 13:31
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.12.2021, 13:31
Помогаю со студенческими работами здесь

Вычислить кусочно-заданную функцию
Составить программу на языке Ассемблер для вычисления кусочно-заданной функции: Выражение . 13...

Вычислить кусочно-заданную функцию
Никак не могу решить эту задачу! Помогите пожалуйста! Срочно нужно!

Вычислить кусочно-заданную функцию
Пожалуйста задачку по с# не могу понять как начать, буду очень благодарен Дана следующая...

Выполнить кусочно заданную функцию
Пожалуйста задачку по с#, не понимаю как сделать:sorry: Дана следующая функция y=f(x): y = 2x -...

Вычслить кусочно-заданную функцию
Нужно создать программу для этой задачи заранее спасибо

Найти дробно-линейную функцию
Найти дробно-линейную функцию, отображающую круг |z|&lt;1 на полуплоскость Im w&lt;0 так, чтобы точки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
Какой локальный веб-сервер выбрать
InfoMaster 19.01.2025
В современной веб-разработке локальные веб-серверы играют ключевую роль, предоставляя разработчикам надежную среду для создания, тестирования и отладки веб-приложений без необходимости использования. . .
Почему планшеты и iPad уже не так популярны, как раньше
InfoMaster 19.01.2025
Эра революционных инноваций История планшетных компьютеров началась задолго до того, как эти устройства стали привычными спутниками нашей повседневной жизни. В начале 1990-х годов появились первые. . .
Как самому прошить BIOS ноутбука
InfoMaster 19.01.2025
BIOS (Basic Input/ Output System) представляет собой важнейший компонент любого компьютера или ноутбука, который обеспечивает базовое взаимодействие между аппаратным и программным обеспечением. . .
Какой Linux выбрать для домашнего компьютера
InfoMaster 19.01.2025
Современные реалии выбора операционной системы В современном мире выбор операционной системы для домашнего компьютера становится все более важным решением, которое может существенно повлиять на. . .
Как объединить два словаря одним выражением в Python
InfoMaster 19.01.2025
В мире программирования на Python работа со словарями является неотъемлемой частью разработки. Словари представляют собой мощный инструмент для хранения и обработки данных в формате "ключ-значение". . . .
Как без исключения проверить существование файла в Python
InfoMaster 19.01.2025
При разработке программного обеспечения на Python часто возникает необходимость проверить существование файла перед выполнением операций с ним. Это критически важная задача, которая помогает избежать. . .
Как определить, содержит ли строка подстроку в JavaScript
InfoMaster 19.01.2025
При разработке веб-приложений часто возникает необходимость выполнять различные операции со строками, среди которых особое место занимает поиск подстрок. JavaScript предоставляет несколько встроенных. . .
Что такое метаклассы в Python
InfoMaster 19.01.2025
Метаклассы в Python представляют собой один из самых мощных и одновременно сложных механизмов языка, позволяющий программистам контролировать процесс создания классов. По своей сути, метакласс. . .
Как удалить свойство из объекта JavaScript
InfoMaster 19.01.2025
В современной веб-разработке объекты JavaScript играют фундаментальную роль в организации и структурировании данных. Они представляют собой контейнеры, которые хранят связанные данные и. . .
Какая разница между String и string в C#
InfoMaster 19.01.2025
В языке программирования C# существует интересная особенность: для работы со строками можно использовать как String, так и string. Эта двойственность часто вызывает вопросы у разработчиков, особенно. . .
Как в Git откатить репозиторий к предыдущему коммиту
InfoMaster 19.01.2025
В современной разработке программного обеспечения система контроля версий Git стала неотъемлемой частью рабочего процесса, предоставляя разработчикам мощные инструменты для управления изменениями в. . .
Как работают замыкания (closure) в JavaScript
InfoMaster 19.01.2025
В мире современной веб-разработки замыкания (closures) представляют собой один из фундаментальных концептов языка JavaScript, который часто вызывает затруднения у начинающих разработчиков, но при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru