我有一个表示有理数的字符串。
我想用strtof(nptr, &endptr)
将字符串转换为浮点数问题是,例如字符串"1.0000000000000000000001"
将转换为1.
而不引发任何标志(iirc)。
如何捕获这种精度损失?
没有,至少在标准库中没有;没有任何strto*
转换函数会告诉您该值是否不能精确地表示。
编辑
我知道这不是很有帮助,但这意味着你必须在标准库之外的任何东西。您要么必须编写自己的转换例程,以某种方式跟踪精度损失(我不知道您将如何实现这一点),要么必须使用一些任意精度的库,如GMP,或者必须实现自己的二进制编码的十进制版本,并手工编写自己的API来分配,比较和操作BCD值。
C并没有给你做这种分析所需的工具。