![]() |
1
3
如果希望每次转换都得到准确的结果,就必须使用任意精度的算术,如printf()实现中所做的那样。如果您想要得到“接近”的结果,可能只在最低有效数字上有所不同,那么一个非常简单的基于双精度的算法就足够了:对于整数部分,重复除以10并附加剩余数以形成十进制字符串(反向);对于小数部分,重复乘以10并减去关闭整数部分以形成十进制字符串。 我最近写了一篇关于这种方法的文章: http://www.exploringbinary.com/quick-and-dirty-floating-point-to-decimal-conversion/ . 它不打印科学符号,但这应该是微不足道的补充。这个算法会打印出低于正常值的数字(我打印的数字准确无误,但你必须做更彻底的测试)。 |
![]() |
2
1
非规范化数字不能转换为同一浮点类型的规范化数字。等效规范化数的指数太小,无法用指数表示。 要打印标准化的数字,我能想到的一个愚蠢的方法是重复乘以10(好吧,对于小数部分)。 |
![]() |
3
0
首先需要做的是使用对数将指数转换为十进制(因为这可能是您想要的输出)。取结果的小数,将尾数乘以该小数的exp10,然后将其转换为十进制字符。从这里开始,您只需要在适当的位置插入小数点,然后按现在的十进制指数移动。 |
![]() |
4
0
斯蒂尔的一篇论文更详细地描述了一种算法,它似乎与你所概述的算法基于相同的原理。如果内存可用,则有时会强制使用无限精度算法。(我想是的 如何准确打印浮点数 但citeeser现在已经不在这里了,我无法确认,谷歌的结果也被20年后的一篇回顾性论文所污染。 |
![]() |
Yatendra Rathore · 浮点数是如何存储在CPU中的? 8 年前 |
![]() |
zell · 是否存在由浮点溢出引起的已知安全问题? 8 年前 |
![]() |
Chris · 如何将4字节IEEE(小端)浮点二进制表示转换为浮点 11 年前 |