Каков инклюзивный диапазон значений float и double в Java?

StackOverflow https://stackoverflow.com/questions/1650505

Вопрос

Каков инклюзивный диапазон значений 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.

Конечно, вы можете использовать числа с плавающей запятой или двойные для "критического" значения. вещи ... Многие приложения ничего не делают, только сокращают числа, используя эти типы данных.

Возможно, вы неправильно поняли некоторые предостережения относительно чисел с плавающей запятой, например рекомендацию никогда не сравнить для точного равенства и т. Д.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top