Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Fakeoke
317 / 316 / 202
Регистрация: 28.07.2011
Сообщений: 1,852
1

Вычисление функции с использованием FPU через разложение в степенной ряд

17.05.2015, 18:14. Просмотров 858. Ответов 6
Метки нет (Все метки)

Всем доброго времени суток!
Код пишется на C++ (Visual Studio) + ассемблерная вставка
Интересует именно ассемблерная вставка, поэтому создал тут

Задание такое:
Для заданного значения х (вводится с клавиатуры), вычислить функцию f(x), используя ее разложение в степенной ряд в двух случаях:
а) для заданного n (n=10);
б) для заданной точности e (вводится с клавиатуры).
Для сравнения найти точное значение функции.

функция
y=sin(x)
ряд для нее думаю всем известен
S:=x-x^3/3! + ... +(-1)^n * x^(2n+1)/(2n+1)!

еще есть диапазон изменения x, правда не знаю зачем он
0.1<x<1

вот код:
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
#include <iostream>
#include <stdlib.h>
#include <iomanip>
#include <windows.h>
#include <math.h>
 
 
using namespace std;
double x;
int f = 1;
int n = 10; //n = 10 по варианту 
double res;
 
int main()
{
    cout << "Input x : " << endl;
    cin >> x;
    __asm{
        finit
            lea esi, x
            lea edi, f
            fld qword ptr[esi] // загрузить FPU x
            mov ecx, n; //счетчик цикла
 
             fldz; //загрузить FPU sum = 0
    cycle:
             fadd st(1), st(0) //sum = x
                 fld qword ptr[esi] //загрузить FPU x
                 fmul;              //st(0)=x*x
        fld qword ptr[esi] //загрузить FPU x = 0.056739
            fmul           //st(0)=x*x*x
            fchs;         //;st(0)=-x*x*x
 
        fidiv WORD PTR[edi] //st(0)/f
            mov ebx, f     //;ebx=f
            inc ebx       //;ebx=ebx+1
            mov f, ebx     //;f=f+1
 
            fidiv WORD PTR[edi] //;st(0)/(f*(f+1))=-x^3/6
            mov ebx, f         //;ebx=f+1
            inc ebx            //; ebx = ebx + 1
            mov f, ebx       //;f=f+2
            loop cycle       //крутимся в цикле n раз
            fxch;           //;в очередной раз меняем знак
            fstp res      //res=x-x^3/6+x^5/120-x^7/5040+...
    }
    cout << "Asm Sin = " << res << endl;
    cout << " sin =" << sin(x) << endl;
    system("pause");
    return 0;
}
почему-то неправильно работает...

Добавлено через 4 часа 9 минут
heeeelp ;(

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2015, 18:14
Ответы с готовыми решениями:

Вычисление интеграла через разложение в ряд
Задание во вложении. Собственно вопрос, при использовании fyl2x часть данных из...

Посчитать значение функции sin(0.056739), используя разложение ее в ряд Тейлора
Здравствуйте! Нужна помощь с Ассемблером. Есть задание: Посчитать значение...

Посчитать значение функции cos(0.056739), используя разложение ее в ряд Тейлора, с точностью до пятого члена этого разложения
Помогите пожалуйста написать программку Написать фрагмент программы на языке...

Используя разложение в ряд Тейлора найти значение ch(x)
Здравствуйте, Дана Задача: Макроассемблер - Все повторяющиеся фрагменты...

Как написать программу на ассемблере для вычисления выражения через FPU?
f(x,y,z)=(lg(x)*0,032*y^3*0,992)/(x^2*0,909*(0,412-y^8*0,771))-0,574 ...

6
Fakeoke
317 / 316 / 202
Регистрация: 28.07.2011
Сообщений: 1,852
19.05.2015, 21:27  [ТС] 2
нууу, ошибка то мелкая наверное

Добавлено через 23 часа 47 минут
плак плак. никто не хочет мне помочь
0
Ethereal
4849 / 1870 / 243
Регистрация: 17.02.2013
Сообщений: 2,782
19.05.2015, 21:48 3
Вставь в начало твоей ассемблерной вставки
int 3
Откомпилируй. Загрузи в отладчик TD32. Нажми F9. Программа остановится на int 3, посчитав, что это точка останова. Увеличь eip на единицу. Нажми Alt-V N , чтобы увидеть регистры FPU. И проходи свою вставку по шагам, нажимая F7. И сравнивай те результаты, что получаются с теми, что должны быть. Так ошибку и найдешь.
0
Fakeoke
317 / 316 / 202
Регистрация: 28.07.2011
Сообщений: 1,852
19.05.2015, 23:01  [ТС] 4
это конечно все интересно, но что-то я не понимаю что я должен тут найти))(((

моя не понимай отладчик
0
Миниатюры
Вычисление функции с использованием FPU через разложение в степенной ряд  
Ethereal
4849 / 1870 / 243
Регистрация: 17.02.2013
Сообщений: 2,782
19.05.2015, 23:15 5
У тебя ecx = 8. А перед циклом ты в него загружаешь 10. Значит два оборота цикла cycle ты уже по шагам прокрутил. Ну так считало-то при этом именно так как ты задумал ? В регистрах сопроцессора оказывались именно те значения, которые ты хотел получать ? Или другие ?

Добавлено через 4 минуты
Чего можно не понимать в отладчике ? Полоска показывает на ту команду процессора, которая будет выполняться. Нажимаешь F7 - она выполнилась. Смотришь что в итоге получилось в регистрах ? То, что ты задумывал или не то ?
0
umbrto
2 / 2 / 0
Регистрация: 04.02.2014
Сообщений: 114
20.05.2015, 01:00 6
тебе даже белым подсветит какие флаги и регистры были изменены
главное следи внимательно
0
Fakeoke
317 / 316 / 202
Регистрация: 28.07.2011
Сообщений: 1,852
20.05.2015, 14:27  [ТС] 7
в том то и дело что в этих st показывается только 0 либо 1 (valid / zero)
а где именно численные значения смотреть?
беда короче
0
20.05.2015, 14:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2015, 14:27

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

Вычисление функции, используя ее разложение в степенной ряд
Помогите исправить код, пожалуйста. Для х изменяющегося от a до b с шагом...

Вычисление функции через разложение в ряд (Ряд Тейлора)
Привет всем. Задание такого плана: Вычислить и вывести на экран в виде...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru