gpt4 book ai didi

c++ - 我在哪里可以找到世界上最快的 atof 实现?

转载 作者:IT老高 更新时间:2023-10-28 21:57:10 30 4
gpt4 key购买 nike

我正在寻找针对美国英语语言环境、ASCII 和非科学符号进行优化的 IA32 上极快的 atof() 实现。 windows 多线程 CRT 在每次调用 isdigit() 时都会检查语言环境的变化,因此在这里很糟糕。我们目前的最佳表现源自 perl + tcl 的 atof 实现中的最佳表现,其性能比 msvcrt.dll 的 atof 高出一个数量级。我想做得更好,但我没有想法。 BCD 相关的 x86 指令似乎很有希望,但我无法让它胜过 perl/tcl C 代码。任何 SO'ers 都可以挖掘到最好的链接吗?也欢迎基于非 x86 汇编的解决方案。

基于初步答案的澄清:

~2 ulp 的误差对于这个应用来说是可以的。
要转换的数字将通过网络以小批量 ascii 消息的形式到达,我们的应用程序需要以尽可能低的延迟进行转换。

最佳答案

您的准确度要求是什么?如果你真的需要它“正确”(总是得到最接近指定小数的浮点值),可能很难击败标准库版本(除了删除你已经完成的语言环境支持),因为这需要进行任意精度算术。如果您愿意容忍一两个 ulp 的错误(并且比次规范的错误更多),那么 cruzer 提出的这种方法可以工作并且可能更快,但它绝对不会产生 <0.5ulp 的输出。您将在分别计算整数和小数部分的准确性方面做得更好,并在最后计算分数(例如,对于 12345.6789,将其计算为 12345 + 6789/10000.0,而不是 6*.1 + 7*.01 + 8 *.001 + 9*0.0001) 因为 0.1 是一个无理二进制分数,并且在计算 0.1^n 时误差会迅速累积。这也让您可以使用整数而不是 float 来完成大部分数学运算。

自 (IIRC) 286 以来,BCD 指令还没有在硬件中实现,现在只是微编码。它们不太可能具有特别高的性能。

关于c++ - 我在哪里可以找到世界上最快的 atof 实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/98586/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com