浮点数是否有 32 个二进制数字,双精度数是否有 64 个二进制数字?文档太难理解了。
所有位都转换为有效数字吗?还是小数点的位置占用了一些位?
原文由 Eamon Moloney 发布,翻译遵循 CC BY-SA 4.0 许可协议
浮点数是否有 32 个二进制数字,双精度数是否有 64 个二进制数字?文档太难理解了。
所有位都转换为有效数字吗?还是小数点的位置占用了一些位?
原文由 Eamon Moloney 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
float : 32 位(4 个字节),其中 23 位 用于尾数(大约 7 个十进制数字)。 8 位用于指数,因此浮点数可以使用这 8 位将小数点“移动”到右侧或左侧。这样做可以避免在尾数中存储大量零,如 0.0000003 (3 × 10 -7 ) 或 3000000 (3 × 10 7 )。有 1 位用作符号位。
double : 64 位(8 字节),其中 52 位 用于尾数(大约 16 位十进制数字)。 11 位用于指数,1 位用于符号位。
由于我们使用的是二进制(仅 0 和 1),因此当数字不为零时,尾数中的一位隐式为 1(float 和 double 都使用此技巧)。
此外,由于所有内容都是二进制的(尾数和指数),因此转换为十进制数通常并不准确。像 0.5、0.25、0.75、0.125 这样的数字被准确存储,但 0.1 不是。正如其他人所说,如果您需要精确存储分,请不要使用 float 或 double,请使用 int、long、BigInteger 或 BigDecimal。
资料来源:
http://en.wikipedia.org/wiki/Floating_point#IEEE_754:_floating_point_in_modern_computers
http://en.wikipedia.org/wiki/Binary64
http://en.wikipedia.org/wiki/Binary32