回答
在一定分數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