[an error occurred while processing this directive]
|
Подскажите, почему этот код:
#define pi 3.14159265358979323846
void main(void)
{
float tmt;
tmt = 2047.0*sinf (pi/2)+2047.0;
}
возвращает в симуляторе (и не только) tmt=2.18078e+012,
когда должен 4094.0.
Я помоему понял из-за чего это происходит просматривая
код в дизассемблере: после вычисления синуса в r0 возвра-
щается 1.0 - т.е. то что нужно, а затем идет преобразование
этой 1.0 во флоат, хотя она уже во флоате (т.е. f4=float f0).
В результате f4=1.065e9, а дальше это умножается на 2047
и прибавляется 2047 и получаем тот самый неправильный tmt.
Так вот как с этим бороться?
E-mail: info@telesys.ru