在C程序的源文本中,.1
和0.1
具有相同的值吗?
最佳答案
.1
表示十分之一,与 0.1
相同。但是,由于 C 标准缺乏严格性,根据 C 2018 6.4.4.2 5,.1
和 0.1
不一定会转换为相同的内部值。在所有具有合理质量的编译器中将是相同的。 (6.4.4.2 5 说“同一源形式的所有浮点常量应转换为具有相同值的相同内部格式。”脚注 77 给出了具有相同数学值但不一定转换为相同值的源形式的示例。内部值(value)。)
源文本中的浮点常量被转换为内部格式。最常见的是使用基于二进制的格式。大多数十进制数字(包括 0.1)不能完全用二进制 float 表示。因此,当它们被转换时,结果将被四舍五入(以二进制形式)为可表示的值。在典型的 C 实现中,.1
变为 0.1000000000000000055511151231257827021181583404541015625。
所有优秀的编译器都会将 .1
和 0.1
转换为相同的值。 C 标准对此不严格的原因是,涉及指数或许多数字的其他浮点文字很难(在某种意义上)转换为具有理想舍入的二进制浮点。从历史上看,有一些 C 实现会伪造转换。 C 标准通过不对浮点值的处理提出严格要求来适应这些实现。 (今天,好的算法是众所周知的,任何好的编译器都应该将浮点文字转换为最接近的可表示值,并与偶数低位数字相关,除非用户另有要求。)
因此,C 标准不保证 .1
和 0.1
具有相同的值。然而,在实践中,他们会的。
关于c - 浮点文字 “.1” 与 C 中的 “0.1” 相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51793657/