ava*_*kar 3 c c++ floating-point
我试图将双精度转换为本机NT应用程序中的字符串,即仅依赖于的应用程序ntdll.dll.不幸的是,ntdll的版本vsnprintf不支持%fet al.,迫使我自己实现转换.
上述ntdll.dll出口只有少数的math.h功能(floor,ceil,log,pow,...).但是,我有理由相信,math.h如果有必要,我可以实现任何不可用的功能.
在GNU的libc中有一个浮点转换的实现,但代码非常密集且难以理解(GNU缩进样式在这里没有帮助).
我已经通过对数字进行归一化来实现转换(即将数字乘以/除以10直到它在间隔中[1, 10)),然后通过modf将小数部分减去10并将小数部分乘以10来生成每个数字.这有效,但是精度损失(只有前15位是正确的).当然,精度的损失是算法固有的.
我会使用17位数字,但是能够正确生成任意数量的数字的算法将是首选.
你能建议一个算法或指向一个好的资源吗?
双精度数字的精度(十进制)数不超过15.你绝对没有办法得到"正确的任意数字"; doubles不是bignums.
既然你说你对17位重要人物感到满意,那就用long double; 在Windows上,我认为,这将给你19个重要数字.