回答
在一定分数f
(其中0 ≤ f < 1
)转换到数字的序列用碱基B
,执行该算法:
mantissa = 0
exponent = 0
while f > 0 and exponent > minExponent:
p = f * B
i = floor(p)
f = p - i
mantissa = mantissa * B + i
exponent -= 1
minExponent
是限制输出的大小的常数。的mantissa
和exponent
最终值使得mantissa * B^exponent == f
(原f
)(的exponent >= minExponent
约束下
注意,该算法并不关心如何在计算机内部表示分数这可能是二元或三元或sexagesimal。;不要紧。该算法转换f
为整数,当由的B
适当功率除以,等于f
。
还注意mantissa
需要能够存储尽可能多的数字作为-minExponent
的。这可能意味着你需要使用一个大整数天秤座ry,这取决于你的编程语言提供了什么。
以下是一个演示的算法的完整Python脚本:
from __future__ import division
from math import floor
def convert(f, B, minExponent):
mantissa = 0
exponent = 0
while f > 0 and exponent > minExponent:
p = f * B
integer = floor(p)
f = p - integer
mantissa = mantissa * B + integer
exponent -= 1
print "result = %d * %d^%d" % (mantissa, B, exponent)
convert(3/4, 10, -40)
convert(5/8, 10, -40)
convert(1/3, 10, -40)
下面是输出:
result = 75 * 10^-2
result = 625 * 10^-3
result = 3333333333333333031620069604124830728192 * 10^-40
我想感谢您给出的努力,但我需要知道这一点: .. 2 1 0。 -1 -2 .. .. 1 1 0。 1 1 .. left from point:1 * 2^2 + 1 * 2^1 + 0 * 2^0 = 6 right from point:1 *(2 ^( - 1))+ 1 *(2^(-2))= 1 * 0.50 + 1 * 0.25 = 0.75 – jovanMeshkov
我不理解您的评论。也许你应该编辑你的问题来详细描述程序的输入是什么,以及相应的输出应该是什么,并给出例子。 –
我希望这个手工解决,而不是一个程序 – jovanMeshkov
- 1. 浮点十六进制八进制二进制
- 2. 十进制到二进制(二进制)
- 3. 二进制到十进制
- 4. 十六进制,八进制,二进制到十进制(C++)
- 5. 二进制,八进制,十六进制到十进制程序
- 6. 从十六进制到十进制,二进制到十进制和八进制到十进制程序C++
- 7. 二进制到十进制和十进制到二进制转换器
- 8. 将十进制浮点数转换为二进制
- 9. 将十进制浮点数转换为二进制并返回
- 10. 用十进制数表示的二进制浮点数
- 11. 浮点到十进制和十进制浮点。所有转换一般
- 12. 将二进制浮点数转换为十六进制浮点数
- 13. 十六进制浮点数
- 14. 十进制浮点系统。
- 15. 十进制浮点数
- 16. 六到二进制到十进制(浮点表示归一化的)
- 17. C#System.OverflowException二进制到十进制和十六进制转换
- 18. 将十六进制转换为二进制到十六进制?
- 19. 如何将数字(十进制)转换为二进制(二进制)数字和从二进制到十进制?
- 20. 十进制到二进制不工作
- 21. 二进制到十进制转换
- 22. 十进制到二进制Java方法
- 23. java二进制到十进制
- 24. 十进制到二进制转换
- 25. 十六进制到二进制转换
- 26. UDF十进制到二进制
- 27. 十进制到熊猫二进制
- 28. 十进制到二进制代码
- 29. 十进制到二进制转换
- 30. 十进制素数到二进制
你的意思是浮点到十进制?这是IEEE754浮点?还是另一种类型? – hexafraction
IEEE754和是的,我的意思是浮点数到小数点 – jovanMeshkov