检查将字符串转换为浮点数时的精度损失



我有一个表示有理数的字符串。

我想用strtof(nptr, &endptr)

将字符串转换为浮点数问题是,例如字符串"1.0000000000000000000001"将转换为1.而不引发任何标志(iirc)。

因此,我的问题是:如何捕获这种精度损失?

如何捕获这种精度损失?

没有,至少在标准库中没有;没有任何strto*转换函数会告诉您该值是否不能精确地表示。

编辑

我知道这不是很有帮助,但这意味着你必须在标准库之外的任何东西。您要么必须编写自己的转换例程,以某种方式跟踪精度损失(我不知道您将如何实现这一点),要么必须使用一些任意精度的库,如GMP,或者必须实现自己的二进制编码的十进制版本,并手工编写自己的API来分配,比较和操作BCD值。

C并没有给你做这种分析所需的工具。