Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.06.2022, 22:34   #1
максхи
Пользователь
 
Регистрация: 20.12.2021
Сообщений: 60
По умолчанию синус на ассемблере и проблемы с FPU

Как найти синус или косинус числа в переменной ug при помощи сопроцессора, и поместить в переменную x округлённый результат?
Я пытался разобраться с ариф-м сопроцессором, но числа становятся другими, даже при вводе 0 посредством команды fld в st(0) располагается
float 7.0064923216240853540E-44
hex 3F6F C8000000 00000000
Почему?
MASM32
максхи вне форума Ответить с цитированием
Старый 08.06.2022, 22:48   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

А полный исходный текст можно? Ответить что именно вы сделали не так не получится.
Цитата:
Сообщение от максхи Посмотреть сообщение
hex 3F6F C8000000 00000000
То что вы привели это 11001e-10010100(10=2)
Код:
fldpi ; pi()
fimul dword ptr AngleDeg ; Угол в градусах (целое в диапазоне -180 .. 180)
fidiv dword ptr const180 ; число 180 (целое =180)
fld st0 ; скопировали значение
fld st0 ; скопировали значение
fsin ; st0=sin(AngleDeg); st1 = AngleRad; st2 = AngleRad
fstp dword ptr floatSin_AngleDeg ; вещественное число =sin(AngleDeg)
fcos ; st0 = cos(AngleDeg); st1 = AngleRad
fstp dword ptr floatCos_AngleDeg ; вещественное число =cos(AngleDeg)
fsincos ; st0 = cos(AngleDeg); st1 = sin(AngleDeg)
fstp dword ptr floatCos_AngleDeg_too
fstp dword ptr floatSin_AngleDeg_too
Пример использования команд FPU fsin / fcos / fsincos

Последний раз редактировалось macomics; 09.06.2022 в 01:04.
macomics вне форума Ответить с цитированием
Старый 18.06.2022, 12:16   #3
Nif-naf
Форумчанин
 
Аватар для Nif-naf
 
Регистрация: 05.09.2016
Сообщений: 135
По умолчанию

Необходимо считать по рад=грд*П/180. В код нужен угол в радианах.
Код:
finit
fld DWORD PTR рад
fsin
fstp DWORD PTR SINUS
fwait
Немного о GoAsm.
Nif-naf вне форума Ответить с цитированием
Старый 21.04.2024, 21:25   #4
максхи
Пользователь
 
Регистрация: 20.12.2021
Сообщений: 60
По умолчанию

Код:
finit
fild dword ptr Angle
fcos 
fmul dword ptr desy
frndint
fistp dword ptr floatCos_AngleDeg
почему-то frndint округляет -5.8314592298714128700E-45 к значнию 0.0
максхи вне форума Ответить с цитированием
Старый 22.04.2024, 04:25   #5
Vapaamies
Просветитель
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,844
По умолчанию

Потому что -5⋅10⁻⁴⁵ < -2147483648.
Vapaamies вне форума Ответить с цитированием
Старый 25.04.2024, 11:54   #6
максхи
Пользователь
 
Регистрация: 20.12.2021
Сообщений: 60
По умолчанию

В этом случае вместо fmul fimul используется, чтобы на целое число умножить.
максхи вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Синус kuy Паскаль, Turbo Pascal, PascalABC.NET 1 08.11.2011 22:56
Проблемы с программами на ассемблере? Voozy Помощь студентам 1 27.04.2010 17:01
как объявить синус? pinya86 Microsoft Office Excel 4 13.05.2009 03:05
синус Кристина1 Помощь студентам 9 13.11.2008 22:38
Синус AndrewASV Общие вопросы Delphi 4 24.10.2007 13:21