Форум » [x]Harbour » Весёлый Int() » Ответить

Весёлый Int()

Dima: [pre2] Func Main() local n := (3.14 ^ 3.14 ^ 3.14 ^ 3.14 ) / 0.33 ? n ? int(n) RETURN NIL [/pre2] хрень какая то )) 7345182531368862.00 // это N 7345182531368864 // это INT(N) а должно быть 7345182531368862 , куда пропала двойка ?

Ответов - 3

Pasha: Это ж квадриллионы получаются. Если на пальцах: для мантиссы у 64-битного double выделяется 52 бита. 2^52 = 4503599627370496, что меньше, чем результат выражения (3.14 ^ 3.14 ^ 3.14 ^ 3.14 ) / 0.33 Отсюда и получается погрешность.

Dima: Pasha Понял. Сенкс.

Pasha: Берем harbour 64-бит local n := (3.14 ^ 3.14 ^ 3.14 ^ 3.14 ) / 0.33 ? n ? int(n) результат: 7345182531368845.00 7345182531368845 точно не скажу, возможно там используется 128-битные long double с мантиссой 111 бит, которой не только на квадриллионы хватит, а страшно сказать на что. Кстати, результат отличается от твоего, и так неслабо, на 18 целковых




полная версия страницы