2016-09-01 4 views
0

Учитывая 3^5 (3 ** 5 или 3 * 3 * 3 * 3 * 3) = 243.Почему функция Ruby Math.log возвращает неправильные значения?

Почему/как это рубин сделать следующее:

n = 243 
Math.log(n,3) 
returns: 
4.999999999999999 

Math.log(243)/Math.log(3) 
returns: 
4.999999999999999 

3**Math.log(n,3) 
returns: 
242.99999999999977 

Это последнее действительно получает меня. Что-то здесь не так? Я что-то упустил? И то и другое?

Спасибо!

+4

«Я что-то упускаю» - математика с плавающей точкой. –

+0

Если вам нужны номера с плавающей запятой произвольной точности, вы можете использовать gt 'flt':' require 'flt/sugar'; D.math {log (3 ** 5,3)} ' Но помните, что это ухудшит производительность. – michau

ответ

1

Значения не являются ошибочными, это связано с тем, что точность с плавающей запятой ограничена.