任何二进制浮点都可以完全以十进制格式设置。结果字符串可能有些长,但是有可能。在关于浮点的文章中,我谈到了精度的重要性,现在我需要此功能。面临的挑战是编写一个程序或函数,该程序或函数将浮点值作为输入并格式化精确的十进制字符串作为输出。
为了确保我们使用正确的浮点数,必须提供精确的格式作为程序的输入。此格式将是两个整数Significand Exponent
,实际的浮点值是Significand * 2 ^ Exponent
。请注意,两个值都可以为负。
细节:
- 必须支持至少32位浮点数的范围和精度(没有输入会超出该范围)
- 十进制格式的值必须是精确的表示形式(仅足够接近以保证正确的倒圆角浮点不够好)
- 我们不信任标准库浮点格式化功能足够正确或不够快(例如:)
printf
,因此可能无法使用它们。您必须进行格式化。允许使用集成格式/转换功能。 - 可能没有任何前导零或尾随零,除非在
.
没有整数部分的情况下,前面必须有一个前导零。 - 允许一个功能或整个程序。
例子:
1 -2 => 0.25
17 -3 => 2.125
-123 11 => -251904
17 50 => 19140298416324608
23 -13 => 0.0028076171875
3 120 => 3987683987354747618711421180841033728
3 -50 => 0.00000000000000266453525910037569701671600341796875
-3 -50 => -0.00000000000000266453525910037569701671600341796875
10 -2 => 2.5
-12345 -3 => -1543.125
0 0 => 0
161 -4 => 10.0625
512 -3 => 64
最短的代码胜出。
3
是否可以使用无限精度的浮点运算?
—
丹尼斯
如果指数为非负数,我们可以以
—
Sp3000
.0
?结尾吗?
@丹尼斯:是的,允许无限制或高精度的算术运算。
—
edA-qa mort-ora-y
我认为这是不一致的。如果
—
orlp
0.abc
不是前导零,则abc.0
不是尾随的。
约定
—
orlp
.0
在处理浮点数时总是以整数结尾。例如,参见Python:str(1.0) == '1.0'
vs str(1) == '1'
。您的逻辑仍然不一致。