什么是float和double在Java中的包容范围是多少?
你为什么不推荐使用float或double任何东西,其中精度是至关重要的?
什么是float和double在Java中的包容范围是多少?
你为什么不推荐使用float或double任何东西,其中精度是至关重要的?
Java的Double
类具有包含类型的最小和最大价值的成员。
2^-1074 <= x <= (2-2^-52)·2^1023 // where x is the double.
退房Min_VALUE
和MAX_VALUE
的静态最终成员Double
。
(一些)人们会建议不要使用浮点类型的东西在那里准确性和精确度是至关重要的,因为舍入误差可以通过可测量的(少量)甩开计算。
Java的基本数据类型
布尔:1位。 可以采取的真正价值,只有假的。
字节:1个符号字节(补)。 覆盖了从-128到127的值。
短:2个字节,符号(2的补数),-32,768到32,767
INT:4个字节,符号(2的补数)。 2,147,483,648到2,147,483,647。
长:8个字节符号(2的补数)。 范围从-9,223,372,036,854,775,808到+9,223,372,036,854,775,807。
浮:4个字节,IEEE 754覆盖从1.40129846432481707e-45的范围内,以3.40282346638528860e + 38(正或负)。
双:8个字节IEEE 754覆盖的范围内4.94065645841246544e-324D到1.79769313486231570e + 308D(正或负)。
炭:2个字节,无符号的Unicode,0至65535
二进制浮点数有有趣的特性精确,因为值存储为提升到一个双循环的二进制整数。 当与子整数值处理(即,0之间的值1),“关轮”的两个负功率非常比不同十个负权力。
例如,该数0.1可以通过1×10 -1来表示,但没有碱-2指数和尾数,可以精确地表示0.1的组合-你的最接近的是0.10000000000000001。
所以,如果你有,你与价值观工作像0.1或0.01很大的应用程序,但其中小(小于0.000000000000001%)错误不能被容忍,那么二进制浮点数字是不适合你。
相反,如果10的幂都没有“特殊”到你的应用程序(十权力是货币计算很重要,但不是在,比方说,物理的大多数应用程序),那么你实际上是最好使用二进制浮点,因为它是通常至少一个数量级的速度更快,并且它是更有效的存储器。
从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的。
当然,你可以使用浮点或双精度的“关键”的东西......许多应用程序做什么,但使用这些数据类型紧缩的数字。
你可能误解了一些关于浮点数的各种注意事项,如推荐的永远不会比进行精确的平等 ,等等。