Форум » [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 целковых
полная версия страницы