.1代表十分之一,与之相同0.1.但是,由于C标准缺乏严格性,.1并且0.1不一定转换为相同的内部值,根据C 2018 6.4.4.2 5.它们在所有合理质量的编译器中是相同的.(6.4.4.2 5说"同一源形式的所有浮动常数应转换为具有相同值的相同内部格式."脚注77给出了具有相同数学值但不一定转换为相同数值的源形式的示例.内在价值.)
源文本中的浮点常量将转换为内部格式.最常见的是,使用基于二进制的格式.大多数十进制数字(包括.1)在二进制浮点中不能完全表示.因此,当它们被转换时,结果将四舍五入(以二进制形式)为可表示的值.在典型的C实现中,.1变为0.1000000000000000055511151231257827021181583404541015625.
所有优秀的编译器将其转换.1并0.1以相同的值.C标准对此松懈的原因是其他浮点文字(包括指数或许多数字)很难(在某种意义上)转换为具有理想舍入的二进制浮点.从历史上看,有些C实现捏造了转换.C标准通过不对浮点值的处理提出严格要求来适应这些实现.(今天,好的算法是已知的,任何好的编译器都应该将浮点文字转换为最接近的可表示值,除非用户另有要求,否则与低位数相关联.)
所以,C标准不保证.1并0.1具有相同的值.但是,在实践中,他们会.