您的位置:首页 > 其它

精确表达浮点数

2014-03-19 14:23 120 查看
在计算机中,使用float或double来存储小数是不能得到精确的值的。如果希望得到精确的值最好用分数形式来表示小数,有限循环小数或无限循环小数都可以转化成分数。比如

0.9=9/10

0.333(3)=1/3(括号中数字表示循环节)

当然一个小数也可以用好几种分数形式来表示。比如:

0.333(3)=1/3=3/9

问题:给定一个有限小数或是无限循环小数,已分数形式返回这个小数。

解答:首先对于有限小数转化成分数很简单,例如:0.a1...an=a1...an/10^n

对于无限循环小数,例如:0.a1...an(b1...bm)令其为X,

则10^nX=a1...an.(b1...bm)

令Y=0.(b1...bm),

则10^mY=b1...bm.(b1...bm)

10^mY-Y=b1...bm,

从而b1...bm=(10^m-1)Y

所以Y=(b1...bm)/(10^m-1)

故0.a1...an(b1...bm)=[(a1...an)*(10^m-1)+b1...bm]/[(10^m-1)*10^n]

当然上面求得的不一定是最简分数,若不是还要进行约分,分子分母同除以分子分母的最大公约数就可以了。

下面给一个例子:

0.33(33)=[33*(10^2-1)+33]/[(10^2-1)*10^2]

=(33*99+33)/9900

=3300/9900

=1/3
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: