gpt4 book ai didi

c++ - 如何仅使用 math.h 将 double 转换为 string?

转载 作者:太空狗 更新时间:2023-10-29 19:38:22 24 4
gpt4 key购买 nike

我正在尝试在 native NT 应用程序(即仅依赖于 ntdll.dll 的应用程序)中将 double 型转换为字符串。不幸的是,ntdll 版本的 vsnprintf 不支持 %f 等,迫使我自己实现转换。

前面提到的 ntdll.dll 仅导出了几个 math.h 函数(floorceil , log, pow, ...)。但是,我有理由相信,如果需要,我可以实现任何不可用的 math.h 函数。

在GNU的libc中有一个 float 转换的实现,但是代码极其密集且难以理解(GNU缩进风格在这里无济于事)。

我已经通过对数字进行归一化(即将数字乘以/除以 10 直到它在区间 [1, 10) 内)然后通过切割积分生成每个数字来实现转换使用 modf 将小数部分乘以 10。这可行,但会损失精度(只有前 15 位数字是正确的)。当然,精度损失是算法固有的。

我会选择 17 位数字,但首选能够正确生成任意数量数字的算法。

你能推荐一个算法或者给我一个好的资源吗?

最佳答案

double 的有效(小数)精度不超过 15 位。绝对没有办法“正确地获得任意数量的数字”; double 不是大数。

既然您说您对 17 位有效数字感到满意,请使用 long double;在 Windows 上,我认为,这会给你 19 个有效数字。

关于c++ - 如何仅使用 math.h 将 double 转换为 string?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1434511/

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