Добрый день. Подскажите пожалуйста какие механизмы есть для повышения точности вычислений с типом float. И как вообще можно оптимизировать код на С с целью более точной работы с float? Заранее спасибо
Кстати, на сколько я понимаю, вычисления с float в SIMD регистрах (SSE), намного менее точны (обладают большей погрешностью), чем те-же самые вычисления в FPU регистрах? 32-bit vs 80-bit.. Имеется ввиду, когда и там и там, в качестве исходного числа, используется float
Pavia Понятно, но в общем это к тому, что возможно не всегда стоит "оптимизировать" код с помощью SEE.. (если дело касается чисел с плавающей точкой)
Хотел ее использовать но не пришлось, вроде быстрая, такими пользуются математики всякие. Есть еше decimal floating point это чтобы деньги без потерь считать. В lisp кстати есть поддержка дробных чисел, если 1/3 то оно не преврашается в 0.33333333333, и вроде там нету периода и ошибки с округлением поэтому. Код (Text): CL-USER 1 > (+ 4/3 1/3) 5/3 CL-USER 3 : 1 > (+ 5/3 0.5) 2.1666665 Код (Text): double f = (5 / 3.0) + 0.5; // 2.1666666666666670 printf("f = %llf",f); // f = 2.166667 В lossless звуковых кодеках flac,vorbis еше пользуются какой-то магией без ошибок в float, но я их исхоники не смотрел.