Еще один тред про 0x5f3759df?
Это хорошо, если считать на SSE. Если расчет идет на FPU, то при таких телодвижениях значения выгружаются из FPU в память, обрабатываются, а затем
снова загружаются в FPU. В результате проигрыш в скорости.
> Ошибка обычно появляется лишь во втором-третьем знаке
считаешь по формуле ln(1+x)~=x
ln(2)~0.69 vs 1
макс. ошибка 30%
Автор, учи математику
Aslan
> считаешь по формуле ln(1+x)~=x
> ln(2)~0.69 vs 1
> макс. ошибка 30%
> Автор, учи математику
Чё? Это для натурального логарифма формула. Причём икс между 0.5 и 1
TarasB
О нем и речь
где ln(1 + mant) ~= mant
Из алгоритма получается 1<=x<2
Разве? Для икс от 0.5 до 1 получается... А, блин, да, 0.5 на 27 процентов меньше, чем 0.69. Тоже много
>Согласно стандарту IEEE 754, число с плавающей точкой будет представлено следующим образом: x = (1 + mant) * 2 ^ (exp - 127)
Автор, раскрой секрет представления half float. очень нужно!
TheGrayWolf
что значит half float ?
TheGrayWolf
> Автор, раскрой секрет представления half float. очень нужно!
ну а что там раскрывать. Упаковвываешь float из 4 байта в 2. Вот и вся хитрость.
TheGrayWolf
lmgtfy.com, корочe http://ru.wikipedia.org/wiki/Число_половинной_точности
Спасибо за оперативность, меня интересует формула:
x = (1 + mant) * 2 ^ (exp - 14) справедлива для half-float ?
кому интересно, нашёл ресурс http://www.binaryconvert.com/, там есть float, но нет half
TheGrayWolf
> x = (1 + mant) * 2 ^ (exp - 14) справедлива для half-float ?
Судя по статье в википедии - (exp-15).
Точнее:
для exp=0: (−1)signbit × 2−14 × 0.significandbits2
для exp<>0: (−1)signbit × 2exponent−15 × 1.significandbits2
kipar
> 0.significandbits2
>1.significandbits2
Извените, а что это такое?
TheGrayWolf
Мантисса.
Т.е. если у нас мантисса 0110010, то
1.0110010 = 1+50/128
kipar
А зная число и экспоненту, можно найти мантису? у меня есть число = 22, опытным путём установил что экспонента = 5, получаем что:
22 = pow( 2, exp−15 ) × 1.m
22 = 0,0009765625 * m;
m = 22528
А не практике цифры не сходяться
Тема в архиве.