• 新鲜事
  • Dragonbox: 浮点数和字符串的快速双向最简精确转换算法

在现实应用中,总有一些情形需要把 IEEE 754 浮点数转换成字符串再转换回来…… 这时使用一个快速正确的转换方法就很重要了。fmtlib::fmt 中就使用了 Dragonbox 这个算法。

C++参考实现: https://github.com/jk-jeon/dragonbox

作者是 UCSD 的数学系博士生 Junekey Jeon。

Homebrew formula 中自带的测试:

test.cpp:

#include <dragonbox/dragonbox_to_chars.h>
#include <iostream>

int main()
{
    double number = 123.456;
    char buffer[25];
    jkj::dragonbox::to_chars(number, buffer);
    std::cout << buffer << std::endl;
    return 0;
}

CMakeLists.txt:

cmake_minimum_required(VERSION 3.0)
project(TestDragonbox)

find_package(dragonbox REQUIRED)
add_executable(test_dragonbox test.cpp)

target_link_libraries(test_dragonbox PRIVATE dragonbox::dragonbox_to_chars)

运行:

cmake -S . -B build
cmake --build build

输出 1.23456E2