Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Binary 浮点二进制到十进制?_Binary - Fatal编程技术网

Binary 浮点二进制到十进制?

Binary 浮点二进制到十进制?,binary,Binary,如果明确给出了指数和尾数,我知道如何从浮点二进制转换为十进制,但是下面的例子呢: 0.11=? 0.101= 我知道值是75和625,但转换过程是如何实现的 转换某些分数f(其中0≤ f=minExponent的约束下) 请注意,该算法不关心计算机内部如何表示分数。它可以是二进制或三进制,也可以是;这无关紧要。该算法将f转换为整数,当除以B的适当幂次时,该整数等于f 还要注意,尾数需要能够存储与-minExponent一样多的数字。这可能意味着您需要使用一个大的整数库,具体取决于您的编程语言提供

如果明确给出了指数和尾数,我知道如何从浮点二进制转换为十进制,但是下面的例子呢:

0.11=? 0.101=


我知道值是75和625,但转换过程是如何实现的

转换某些分数
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
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)
minExponent
是一个限制输出大小的常量。
尾数
指数
的最终值为
尾数*B^指数==f
(原始
f
)(在
指数>=minExponent
的约束下)

请注意,该算法不关心计算机内部如何表示分数。它可以是二进制或三进制,也可以是;这无关紧要。该算法将
f
转换为整数,当除以
B
的适当幂次时,该整数等于
f

还要注意,
尾数
需要能够存储与
-minExponent
一样多的数字。这可能意味着您需要使用一个大的整数库,具体取决于您的编程语言提供了什么

下面是演示算法的完整Python脚本:

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
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

你是说浮点到小数?这是IEEE754浮点吗?还是另一种类型?IEEE754,是的,我是说浮点到小数我想感谢你所付出的努力,但我需要知道:…2110.-1-2…1010.11..左起点:1*2^2+1*2^1+0*2^0=6右起点:1*(2^(-1))+1*(2^(-2))=1*0.50+1*0.25=0.75我不理解你的评论。也许你应该编辑你的问题,详细描述程序的输入应该是什么,相应的输出应该是什么,并举例说明。如果你愿意,你可以手工执行算法。你不懂其中的哪一部分?我懂算法m、 但我想用一种很短的方法(类似于你们的算法)从浮点二进制值中找到十进制值。我找到了它……所以,恕我直言,再次感谢……讨论可以结束了:D