一位读者(Richard Ebeling)邀请我重温一篇较早的博文: Parsing floats in C++: benchmarking strtod vs. from_chars 。当时我报告说,在 C++ 中从 strtod 切换到 from_chars 来解析数字可能会导致速度提高(提高 20%)。代码大致相同,我们从……
字符*字符串= “ 3.1416 ” ; 字符*字符串结束=字符串; 双x = strtod (字符串, & string_end ) ; 如果(字符串结束= =字符串) { //你有一个错误! }
… 到 C++17 中更现代的东西…
标准::字符串st = “ 3.1416 ” ; 双x ; auto [ p , ec ] = std :: from_chars ( st . data ( ) , st . data ( ) + st . size ( ) , x ) ; 如果( p = = st .数据( ) ) { //你有一个错误s! }
当我第一次报告这个结果时,只有 Visual Studio 支持 from_chars。 GCC 12 中的 C++ 库现在完全支持 from_chars。让我们再次运行基准测试:
strtod | 270 MB/秒 |
from_chars | 1 GB/秒 |
所以它几乎快了四倍!基准测试读取 [0,1] 区间中的随机值。
在内部,GCC 12 采用了 fast_float 库。
进一步阅读:每秒千兆字节的数字解析,软件:实践和经验 51 (8),2021。
原文: https://lemire.me/blog/2022/07/27/comparing-strtod-with-from_chars-gcc-12/