众所周知,IEEE 浮点数可以存储所有整数和 2 的倒数的整数倍的精确表示,例如 1/2 或 3/4,只要这些数字保持在浮点范围内 -点类型。
但是,浮点解析器通常能保证解析这些数字的十进制表示的准确结果吗?
例如,如果我在 C 程序中0.75
用作double
文字,编译器是否会保证编译后的代码包含 3/4 的精确表示,或者是否存在产生 0.7 和一些不精确表示之和的风险0.05 的不精确表示?
或者,同样,如果我3e4
用作double
文字,是否可以将精确的 3 乘以 2^(4*ln(10)/ln(2)) 的一些不精确表示或一些类似的数学?
FP解析器在这件事上通常需要遵循什么标准,还是通常完全留给实现?如果是后者,有谁知道 GCC 或 glibc 等实际重要的实现实际上是如何工作的?
我主要是出于好奇,而不是因为我想依赖这种行为;但有时,如果可以知道值仅来自文字来源,则可以很方便地知道 FP 相等比较可以保证工作。