c - 编写我自己的 float 解析器

标签 c floating-point

我正在尝试用 C 编写一个解析器,它的部分工作是将一系列字符转换为 double 字符。到目前为止,我一直在使用 strtod,但我发现它非常危险,并且它无法处理数字位于缓冲区末尾且未以 null 终止的情况。

我想我会自己写。如果我有 a.b 形式的数字的字符串表示,我是否会认为我可以计算 (double)a + ((double)b​​/(double)10^n),其中 n 是数字b 中的数字?

例如,23.4563:

一个= 23 b = 4563

最终答案:23 + (4563/10000)

或者对于 IEEE 格式的 float ,这会产生不准确的结果吗?

最佳答案

要准确读取 float 是很困难的,因为有各种各样的问题必须仔细解决,而且很多人都没有做到。但是,这是一个已解决的问题。要开始,请参阅 How to read floating point numbers accurately, June 1990, by William D. Clinger .

我同意 Roddy 的观点,您最好将数据复制到缓冲区并使用现有的库函数。 (但是,您应该检查您的 C 实现是否提供了 float 字的正确舍入转换。C 标准不需要它,并且某些实现不提供它。)

关于c - 编写我自己的 float 解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15554494/

相关文章:

c - 双星号和 C 中的 `malloc`

c - 释放链表

c - Double 不在 C 中存储数字(数字太小)

python float格式怪异?

c - 为什么浮点比较在不同的编译器上给出不同的输出?

c - 在 C 中格式化字符串

c - 对 `strnstr' 的 undefined reference 如何修复它并运行 strnstr

c - 在这种情况下 "volatile"的优势是什么?

ios - 有什么简单的方法可以在 objective-c 中用一位数舍入 float 吗?

Python - 如何将 float 向下舍入到 1 位有效数字