Одновременное вычисление sin(a) и cos(a) (комментарии)
Это сообщение сгенерировано автоматически.
void sincos(float a, float &s, float &c) { _asm { fld a fsincos fstp dword ptr [c] fstp dword ptr [s] } }
в коде подсказки ошибка, fstp dword ptr [edx] -> fstp dword ptr [ebx]
я думаю о таком должен догадаться компилятор
my.name
компилятор не догадался об ошибке edx / ebx, и программа вылетала из-за того, что переменные передаются в eax/ebx, а берутся из eax/edx
bool
Подправил.
я имел ввиду компилятор должен был бы догадаться, что один и тот же константный угол, мы в одном методе используем для получения и сунуса и косинуса. и подставить такой вариант решения.
my.name
Так это проверить просто.
Напиши три строчки кода, да скомпилируй.
my.name
Ну кстати в хедерах физикса есть именно такой код (ну то есть ту же идею использует), так что наверное есть смысл какой-то
смысл есть, на 100 000 итераций sincos выиграла у sinf + cosf ~11 тиков на P4 2.4ghz
jaxon
my.name
Возможно еще и такое - компилятор может догадаться. (а может и нет) Здесь он гарантированно сделает так.
> смысл есть, на 100 000 итераций sincos выиграла у sinf + cosf ~11 тиков на P4 2.4ghz
КРУТО!!!
сори за офтоп
bool
Сори, tip добавлял тысячу лет назад, возможно поэтому остались такие ляпы:)
Синус с достаточной точность можно вычислить вообще sin(x)=x-((x^3)/6)
Причем x>=0 и x<=1.57
Но так можно вычислить углы только до 90 градусов)
Если хочется дальше надо продолжать ряд Тейлора)
Но добавив пару евристик можно найти синус любого угла)
С косинусами почти тоже самое :)
Для полноты картины:
sincos(3) - Linux man page
Name
sincos, sincosf, sincosl - calculate sin and cos simultaneously
Тема в архиве.