Math 检查浮点数是否可完全转换为二进制
我知道如何将整数和浮点数转换成二进制。但有些浮点数没有精确的二进制格式。Like 0.5可以精确地写成0.1,0.25可以写成0.01。但是如何确定一个数字是否可以完全转换成二进制呢 要表示为二进制浮点格式,数字必须是2的幂的倍数,包括负幂。例如,.375是可表示的,它是1/8的倍数。(1/8是.125,而.375是它的三倍。)还有其他要求,因为数字的各个部分必须符合浮点格式: 当且仅当某些整数M和e等于M•2e且-253Math 检查浮点数是否可完全转换为二进制,math,floating-point,binary,Math,Floating Point,Binary,我知道如何将整数和浮点数转换成二进制。但有些浮点数没有精确的二进制格式。Like 0.5可以精确地写成0.1,0.25可以写成0.01。但是如何确定一个数字是否可以完全转换成二进制呢 要表示为二进制浮点格式,数字必须是2的幂的倍数,包括负幂。例如,.375是可表示的,它是1/8的倍数。(1/8是.125,而.375是它的三倍。)还有其他要求,因为数字的各个部分必须符合浮点格式: 当且仅当某些整数M和e等于M•2e且-253
以下是测试数字是否符合上述标准的方法 首先,如果数字有小数部分,尝试将数字乘以2,直到没有小数部分。如果乘以149(单精度)或1074(双精度),则该数字不可表示。如果数字没有小数部分,但为偶数,则将其除以2,直到其为奇数。在104(单精度)或971(双精度)分度后停止。完成乘法或除法后,请查看剩余数字的绝对值。如果大于或等于16777216(对于单精度)或9007199254740992(对于双精度),则该数字不可表示。否则,它就是
(提示:使用十进制数字执行乘法步骤时,如果分数部分以5以外的数字结尾,则该数字不可表示。例如,.4和.24不可表示。5、.25和.625不可表示,而.525不可表示。)如果您有大整数算法可用,将
xxx.yyy
重写为分数xxxyy/10^n
其中n是分数部分yyy的长度(位数)
将上述分数的分子和分母的十进制表示形式转换为二进制,然后减少分数:
- 计算gcd(xxxyyy,10^n)
- 还原分子=xxxyyy/gcd(xxxyyy,10^n)
- 减速减速器=10^n/gcd(xxxyyy,10^n)
=最高位的秩设置为1nh
=最低位的秩设置为1nl
nh+1-nl
提供表示有效位所需的位数(二进制数字),它必须在限制范围内例如,在IEEE 754双精度:
nh+1-nl中,您想知道人类是如何检查数字的,还是如何编写检查十进制数字的软件?