Float.MIN_VALUE和Float.MIN_NORMAL之间的区别? [重复]

|                                                                                                                   这个问题已经在这里有了答案:                                                      
已邀请:
第一个问题的答案是重复的。 第二个问题的答案是: 浮点数和双打数都没有无限的精度。您可以方便地认为它们的精度约为16位。超过此限制的所有内容都将导致舍入错误和截断。 因此,1.0e0 + 1e-38由于会舍弃多余的精度,因此除了以1.0e0结尾以外,将无法执行任何操作。 与其他答案一样,它确实需要了解IEEE格式的浮点数实际上是如何以二进制形式添加的。基本思想是二进制浮点数的非符号和指数部分在CPU的IEEE-754单元中进行了移位(Intel上为80位宽,这意味着在末尾总是会截断)计算)代表其实数。以十进制表示,如下所示: 位数:1 234567890123456 值:1.0000000000000000000000000000 ... 0000 值:0.0000000000000000000000000000 ... 0001 处理完添加后,实际上是: 位数:1 234567890123456 值:1.0000000000000000000000000000 ... 0001 因此,请记住,该值会在16位数字标记附近截断(以十进制表示,在32位浮点数中恰好是22个二进制数字,在64位双精度数中恰好是51个二进制数字,而忽略了非常重要的事实前导1被移位(相对于指数)并被假定(有效地将23位二进制数字压缩为32位的22和22位的52压缩为51),这是很有趣的一点,但是您应该阅读更多详细示例,例如此处的详细信息)。 截断: 位数:1 234567890123456 价值:1.00000000000000000000 请注意,非常小的小数部分将被截断,因此保留1。 当我在考虑内存中的实际表示时遇到问题时,可以使用以下页面:十进制到32位IEEE-754格式。在该站点中,还有指向64位的链接,并且反向链接。     

要回复问题请先登录注册