Форум программистов, компьютерный форум, киберфорум
Assembler: математика, вычисления
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
2 / 2 / 0
Регистрация: 14.10.2018
Сообщений: 122
C/C++

[FPU] Вычислить выражение по формуле

06.12.2020, 13:51. Показов 2969. Ответов 8

Author24 — интернет-сервис помощи студентам
Добрый день. Пытаюсь разобраться с математическим сопроцессором на ассемблере. Не пойму порядок действий и присвоение значений. Посчитал значение для arctg(a/d), все совпадает. Но вот как сделать так, чтобы было log2(a)/(arctg(a/d)) не могу понять. Само задание: r=a*b+b*(log2(a)/(arctg(a/d)))+z, с первой частью может еще и разберусь, а вот со 2 проблемы. Буду благодарен за любую подсказку. Возможно кто-то находил нечто подобное.
Assembler Скопировано
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
// aks7.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
//
 
#include <iostream>
#include<stdlib.h>
#include<math.h>
#include<conio.h>
using namespace std;
int main()
{
    setlocale(LC_ALL, "Rus");
    system("color F0");
    double a, b, d, r = 0;
    int z;
    cout << "Введите а \t";
        cin >> a;
        while (a == 0) {
            cout << "Введен 0, повторите ввод\n";
            cin >> a;
        }
 
      cout << "Введите d \t";
      cin >> d;
      while (d == 0) {
          cout << "Введен 0, повторите ввод\n";
          cin >> d;
      }
      cout << "Введите b \t";
      cin >> b;
      cout << "Введите z \t";
      cin >> z;
      _asm {
          finit; инициализировать сопроцессор
          FINIT
 
          FLD a
          FLD d
          FPATAN
          ; fld a
          ; fyl2x
          ; fdiv
 
 
 
          FSTP r
          
      }
      cout << "R=" << r;
      system("pause");
      return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.12.2020, 13:51
Ответы с готовыми решениями:

Вычислить, используя FPU, следующее выражение
Вычислите, используя FPU, следующее выражение. Исходные данные необходимо вводить с клавиатуры, результат выводить на консоль. ...

[FPU] Вычислить выражение по формуле
Помогите реализовать тригонометрическое выражение с вещественными числами на TASM. Как их вообще нужно описывать. Ввод вывод...

Вычислить выражение по формуле
Здрвствуйте у меня возникла такая проблема, в общем дан пример см. во вложения. Последняя строчка это результат который должен получиться....

8
1639 / 1542 / 256
Регистрация: 19.02.2010
Сообщений: 4,121
06.12.2020, 14:12
Цитата Сообщение от Invisibletime Посмотреть сообщение
Посчитал значение для arctg(a/d), все совпадает.
Как может совпадать, если нет команды деления для вычисления a/d?
0
2 / 2 / 0
Регистрация: 14.10.2018
Сообщений: 122
06.12.2020, 14:27  [ТС]
Находил как раз решение для arctg, fpatan автоматически делит a на d, и вроде как перезаписывает новое значение именно в a. Поэтому то я и не могу понять как повторно использовать переменную а, т.к она повторяется трижды.

Добавлено через 1 минуту
VTsaregorodtsev, так или иначе, вероятнее всего Вы не особо разбираетесь в этой тебе, раз уж такое пишите.
0
1639 / 1542 / 256
Регистрация: 19.02.2010
Сообщений: 4,121
06.12.2020, 14:40
Цитата Сообщение от Invisibletime Посмотреть сообщение
и вроде как перезаписывает новое значение именно в a.
не в а - а в регистр на вершине стека.
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8587 / 4433 / 1658
Регистрация: 01.02.2015
Сообщений: 13,753
Записей в блоге: 9
06.12.2020, 19:10
Invisibletime, а что мешает поместить переменную a не только в вершину стека?
Assembler Скопировано
1
2
3
4
5
6
7
8
9
finit
fld [a]
fld st(0)
fld [d]
fpatan   ;st(0) - arctg, st(1) - a
 
fld1
fld st(2); для вычисления логарифма
..........
0
2 / 2 / 0
Регистрация: 14.10.2018
Сообщений: 122
06.12.2020, 20:08  [ТС]
И действительно, большое спасибо за отличную подсказку. Так ,наверное, более менее разберусь
0
2 / 2 / 0
Регистрация: 14.10.2018
Сообщений: 122
07.12.2020, 18:26  [ТС]
Здравствуйте. Почти доделал программу, но вот одна загвоздка, не могу разобраться как связать 2 части кода, а именно (a*b)+(ln(a) / arctg(a / d) + z). (ln(a) / arctg(a / d) + z)- эта часть 100% рабочая, но так как st перезаписывается, то не получается провести сложение с (a*b). Возможно можно как-то записать с сохранением в st(2) допустим, сам такою команду не находил.
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
#include <iostream>
#include<stdlib.h>
#include<math.h>
#include<conio.h>
using namespace std;
int main()
{
    setlocale(LC_ALL, "Rus");
    system("color F0");
    double X, b, d, r = 0;
    double z,m;
    cout << "Введите а \t";
        cin >> X;
        while (X == 0) {
            cout << "Введен 0, повторите ввод\n";
            cin >> X;
        }
 
      cout << "Введите d \t";
      cin >> d;
      while (d == 0) {
          cout << "Введен 0, повторите ввод\n";
          cin >> d;
      }
      cout << "Введите b \t";
      cin >> b;
      cout << "Введите z \t";
      cin >> z;
      _asm {
          finit; инициализировать сопроцессор
          FINIT
 
          FLD X; st(0)
          FLD d; st(0) = d, st(1) = a
          FPATAN; st(0)
          fld1
          fld X; st(2)
          FYL2X
          fdiv st(0), st(1); st(0) = ln(a) ln(a) / arctg(a / d)
          fld b
          fmul
 
 
          fld z
          fadd; ln(a) ln(a) / arctg(a / d) + z
          fld st(2);/////
          
 
          fld X
              fld b
              fmul st(0), st(1)
 
              fadd st(0), st(2);/////
 
          FSTP r
          
      }
      cout << "R=" << r;
      system("pause");
      return 0;
}
Добавлено через 38 минут
Все таки сумел разобраться. Вот код, если кому-то понадобится
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
#include <iostream>
#include<stdlib.h>
#include<math.h>
#include<conio.h>
using namespace std;
int main()
{
    setlocale(LC_ALL, "Rus");
    system("color F0");
    double X, b, d, r = 0;
    double z,m,f;
    cout << "Введите а \t";
        cin >> X;
        while (X == 0) {
            cout << "Введен 0, повторите ввод\n";
            cin >> X;
        }
 
      cout << "Введите d \t";
      cin >> d;
      while (d == 0) {
          cout << "Введен 0, повторите ввод\n";
          cin >> d;
      }
      cout << "Введите b \t";
      cin >> b;
      cout << "Введите z \t";
      cin >> z;
      _asm {
          finit; инициализировать сопроцессор
          FINIT
          
          FLD X; st(0)
          FLD d; st(0) = d, st(1) = a
          FPATAN; st(0)
          fld1
          fld X; st(2)
          FYL2X
          fdiv st(0), st(1); st(0) = ln(a) ln(a) / arctg(a / d)
          fld b
          fmul
 
 
           fld z
           fadd; ln(a) ln(a) / arctg(a / d) + z
           fstp st(2)
          
           fld X
           fld b
           
           fmul st(0),st(1)
           fstp st(1)
 
           fadd st(0),st(2)
 
 
          FSTP r
          
      }
      cout << "R=" << r;
      system("pause");
      return 0;
}
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8587 / 4433 / 1658
Регистрация: 01.02.2015
Сообщений: 13,753
Записей в блоге: 9
07.12.2020, 18:30
Сделайте (a*b) в первую очередь, а потом и всё остальное.
Assembler Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
fld [a]
fld st(0)
fmul [b]
 
fxch st(1)
 
fld1
fld st(1)
FYL2X
 
fxch st(1)
fld [d]
fpatan
 
fdivp st(1), st(0)
.............
1
2 / 2 / 0
Регистрация: 14.10.2018
Сообщений: 122
07.12.2020, 19:00  [ТС]
Большое спасибо, но уже все и так получилось
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.12.2020, 19:00
Помогаю со студенческими работами здесь

Вычислить выражение по формуле
Дан пример: 2,25/1.125-0,5*0,875/(2,75+0,75). Не выходит верный ответ вообще, все что знал перепробовал. Помогите пожалуйста ещё раз. Вот...

Вычислить выражение по формуле
Помогите написать программу с арифметическими командами на сопроцессоре. ( что бы были +,-,*,/) Если можно с коментарием. например...

Вычислить выражение по формуле
Помогите вычислить на ассемблере, именно сам код вычисления

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

Вычислить выражение по формуле
Добрый день! Помогите пожалуйста написать подпрограмму, которая вычисляет значение функции f(x):=4*x^2+3*cos((4*x)+2), при Х:=1.5. И...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Не удержался от оценки концепции двигателя Стирлинга.
Hrethgir 03.04.2025
Сколько не пытался - она выдавала правильные схемы, причём случайно рисовала горячие области в середине, холодные по краям, трубки с краёв в низ и магнит в соединяющей, но при этой выдавала описание. . .
Метод с двумя буферами (или double buffering) или ping-pong buffering
Hrethgir 02.04.2025
Из ответов LM модели. Метод, который предполагает использование двух массивов для хранения промежуточных результатов сложения векторов, обычно применяется в сценариях, где необходимо минимизировать. . .
На любовном киберфронте
Alexander-7 01.04.2025
Недавно на одном малоизвестном сайте знакомств мною заинтересовалась девушка: «Текст немного странный. Но, судя по адресу почты, иностранка», – подумал я. Поколебавшись пару суток, я ответил ей:. . .
Как работает Node.js изнутри
run.dev 29.03.2025
Node. js изменил подход к разработке веб-приложений, позволив использовать JavaScript не только на стороне клиента, но и на сервере. Созданный в 2009 году Райаном Далем, этот открытый,. . .
Моки в Python: Mock Object Library
py-thonny 29.03.2025
Тестирование кода требует особого подхода, когда речь идёт о компонентах, взаимодействующих с внешним миром. Мы часто сталкиваемся с непредсказуемостью HTTP-запросов, чтением данных из базы или. . .
JavaScript: Управление памятью и улучшение производительности
run.dev 29.03.2025
В отличие от низкоуровневых языков программирования, JavaScript не требует ручного выделения и освобождения памяти. Здесь работает автоматический сборщик мусора, который определяет, какие объекты. . .
Мультитенантная архитектура со SpringBoot и PostgreSQL
ArchitectMsa 29.03.2025
SaaS-приложения редко обслуживают одного клиента и обычно они должны поддерживать множество организаций, каждая из которых работает в своём изолированном пространстве. Мультитенантная архитектура. . .
std::span в C++: Производительность и лучшие практики
NullReferenced 28.03.2025
std::span — одно из самых недооценённых нововведений стандарта C++20, которое радикально меняет подход к работе с непрерывными последовательностями данных. По сути, это невладеющее представление. . .
Многопоточность в C#: Threadpool
UnmanagedCoder 28.03.2025
Пул потоков в C# — это коллекция заранее созданных и готовых к использованию потоков, которые находятся в распоряжении приложения. Вместо того чтобы создавать и уничтожать потоки для каждой небольшой. . .
Вопросы на собеседованиях по микросервисам
ArchitectMsa 27.03.2025
Работодатели ищут не просто разработчиков, знающих базовые концепции, а специалистов, разбирающихся в тонкостях масштабирования, отказоустойчивости и производительности. Сейчас на первый план выходят. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер