PDA

Просмотр полной версии : Работа функции взятия числа X к степени Y (EXPT)



saniyo
27.02.2016, 22:18
Уважаемые форумчане нашёл вот такой прикол:

При выполнении EXPT(2,21) число равное = 2097153. О_О
При использовании обычного калькулятора виндоус = 2097152
__________________
разница равна 1

Идем далее

При выполнении EXPT(2,23) число равное = 8388605. О_О
При использовании обычного калькулятора виндоус = 8388608
__________________
разница равна 3

Идем далее

При выполнении EXPT(2,32) число равное = 4294968009. О_О
При использовании обычного калькулятора виндоус = 4294967296
__________________
разница равна 713


Промежуточные значения тоже оличаются.

Yegor
28.02.2016, 00:05
Упёрлись в точность FPU процессора и/или реализации pow() рантайма. Паниковать не стоит, так задумано (http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka10629.html). И вообще делать строгое сравнение плавающих чисел это весьма дурной тон. Двойку принято возводить в степень сдвигом влево, если что (SHL(DWORD#2, 20)).

Калькулятор винды, в свою очередь, использует длинную арифметику, и с ним предел нащупать трудно. Воспроизвести неточность на компьютере можно в какой-нибудь среде программирования (тот же кодесис в режиме симуляции) возведением в ещё большую степень.

saniyo
28.02.2016, 00:27
Сам знаю уже сделал так, голова думает математически.

saniyo
28.02.2016, 00:31
EXP (Y * LN (X)) Результат аналогичен.

Валенок
28.02.2016, 19:52
Сам знаю уже сделал так, голова думает математически.
Математически ? )) тута (http://www.softelectro.ru/ieee754.html) все по полочкам.