Каков инклюзивный диапазон значений float и double в Java?
-
22-07-2019 - |
Вопрос
Каков инклюзивный диапазон значений float и double в Java?
Почему вам не рекомендуется использовать float или double для чего-либо, где точность имеет решающее значение?
Решение
Double
класс имеет члены, содержащие значения Min и Max для типа. Р>
2^-1074 <= x <= (2-2^-52)·2^1023 // where x is the double.
Проверьте Min_VALUE
и MAX_VALUE
статические финальные элементы Double
.
(некоторые) Люди будут рекомендовать не использовать типы с плавающей запятой для вещей, где точность и точность имеют решающее значение, поскольку ошибки округления могут отбросить вычисления на измеримые (небольшие) суммы.
Другие советы
Примитивные типы данных Java
логическое значение:1-битный.Может принимать только значения true и false.
байт:1 байт со знаком (дополнение к двум).Охватывает значения от -128 до 127.
короткий:2 байта со знаком (дополнение к двум), от -32,768 до 32,767
инт:4 байта, подписанные (дополнение к двум).-2,147,483,648 - 2,147,483,647.
длинный:подписано 8 байт (дополнение к двум).Варьируется от -9,223,372,036,854,775,808 до +9,223,372,036,854,775,807.
плавать:4 байта, IEEE 754.Охватывает диапазон от 1.4012986432481707e-45 до 3.40282346638528860e+38 (положительный или отрицательный).
двойной:8 байт стандарта IEEE 754.Охватывает диапазон от 4,94065645841246544e-324d до 1,79769313486231570e+308d (положительный или отрицательный).
обугливающийся:2 байта, без знака, Юникод, от 0 до 65 535
Двоичные числа с плавающей запятой имеют интересные характеристики точности, поскольку значение хранится в виде двоичного целого числа, возведенного в двоичную степень. При работе с целочисленными значениями (то есть значениями от 0 до 1) отрицательные степени двух «округляются»; совсем не так, как отрицательные степени десяти.
Например, число 0.1 может быть представлено как 1 x 10 -1 , но не существует комбинации показателя base-2 и мантиссы, которая может точно представлять 0,1 - ближайший к вам +0,10000000000000001. р>
Так что если у вас есть приложение, в котором вы работаете с такими значениями, как 0,1 или 0,01, но где небольшие (менее 0,000000000000001%) ошибки не допускаются, двоичные числа с плавающей запятой не для вас. р>
И наоборот, если полномочия десяти не являются "особыми" для вашего приложения (степени десяти важны в расчетах валют, но не, скажем, в большинстве приложений физики), тогда вы на самом деле лучше использовать двоичную с плавающей точкой, так как обычно она как минимум на порядок быстрее, и это намного более эффективно использовать память.
Статья из документации Python по проблемам и ограничениям с плавающей запятой отлично справляется со своей задачей объяснения этого вопроса в простой для понимания форме. В Википедии также есть хорошая статья о плавающей точке , в которой объясняется математика, лежащая в основе представления.
float:
Тот Самыйfloat
тип данных - 32-разрядный стандарт IEEE 754 с одинарной точностью с плавающей запятой.Диапазон его значений выходит за рамки данного обсуждения, но указан в разделе 4.2.3 спецификации языка Java.Как и в соответствии с рекомендациями поbyte
иshort
, использоватьfloat
(вместоdouble
) если вам нужно сэкономить память в больших массивах чисел с плавающей запятой .Этот тип данных никогда не должен использоваться для точных значений, таких как валюта.Для этого вам нужно будет использовать java.math.BigDecimal вместо этого класс. Числа и Строки обложкиBigDecimal
и другие полезные классы, предоставляемые платформой Java.
double
:Тот Самыйdouble
тип данных - 64-разрядный стандарт IEEE 754 двойной точности с плавающей запятой.Диапазон его значений выходит за рамки данного обсуждения, но указан в разделе 4.2.3 спецификации языка Java.Для десятичных значений этот тип данных обычно используется по умолчанию.Как упоминалось выше, этот тип данных никогда не следует использовать для точных значений, таких как валюта.
Диапазон значений приведен в разделе 4.2.3 Типы, форматы и значения с плавающей запятой из JLS.
Конечно, вы можете использовать числа с плавающей запятой или двойные для "критического" значения. вещи ... Многие приложения ничего не делают, только сокращают числа, используя эти типы данных.
Возможно, вы неправильно поняли некоторые предостережения относительно чисел с плавающей запятой, например рекомендацию никогда не сравнить для точного равенства и т. Д.