#java #float #double
Кто может подсказать максимальные размеры для float и double по вики: float 32 от 3.4е-038 до 3.4е+038 double 64 от 1.7е-308 до 1.7е+308 По этому коду: System.out.println("MAX FLOAT : "+Float.MAX_VALUE); System.out.println("MIN FLOAT : "+Float.MIN_VALUE); System.out.println("MAX Double : "+Double.MAX_VALUE); System.out.println("MIN Double : "+Double.MIN_VALUE); MAX FLOAT : 3.4028235E38 MIN FLOAT : 1.4E-45 MAX Double : 1.7976931348623157E308 MIN Double : 4.9E-324 Вопрос следующий, где правда?
Ответы
Ответ 1
Смотрите. Есть разница между минимальным нормализованным и ненормализованным значениями. 1.1754943508222875E-38f — это минимальное нормализованное, 1.401298464324817E-45f — минимальное ненормализованнoе значение для float. Вот официальная документация. Немного теории. Обычно числа с плавающей запятой записываются внутри в виде мантисса + экспонента, где мантисса — это число от 0.1 до 1, а экспонента — показатель степени десятки. Например, число 0.0015 содержится как 0.15 + степень 10^-2, 44 — как 0.44 и степень 10^2. (На самом деле там то же самое в двоичном виде, степени двойки и числа между 1 и 2^-1. Но важен принцип.) Под мантиссу отводится фиксированное количество разрядов, стартовая цифра выбрасывается для экономии (потому что она должна быть равна 1 в двоичной системе). Так вот: можно немного выйти за нижнюю грань, используя денормализованные числа — числа наподобие 0.0000156 * 10^-38. У них точность хуже, чем у нормальных чисел, т. к. старшие разряды мантиссы используются для укказания величины. Но это лучше, чем просто 0.
Комментариев нет:
Отправить комментарий