jake1036

编程之美2.6 精确表达浮点数

 2.6精确表达浮点数

  一问题描述:
    使用分数形式来表示小数,有限小数和无限循环小数都可以转化为分数。
    例如: 0.9 = 9 / 10 。
              0.33333(3) = 1 / 3 。
  二问题分析:
    (1) 若是有限小数,则可以使用以下方法: 0.a1 a2 a3 a4 a5 ..an = a1 a2 a3 a4 a5 a6 an / 10 ^ n
    (2) 下面主要考虑无限循环小数:
          设 X = 0.a1 a2 a3 a4 a5 ... an . b1 b2 b3 b4 ... bm(b1 b2 b3 b4 ... bm)
              10 ^ n * X = a1 a2 a3 a4 a5 ... an . b1 b2 b3 b4 ... bm(b1 b2 b3 b4 ... bm)
             
              Y = 0. b1 b2 b3 b4 ... bm(b1 b2 b3 b4 ... bm)
             
              10 ^ m * Y = b1 b2 b3 b4 ... bm . (b1 b2 b3 b4 ... bm)
               10 ^ m * Y - Y = b1 b2 b3 b4 ...bm
                Y = b1 b2 b3 b4 ... bm / (10 ^ m - 1)
        
               则X =( (a1 a2 a3 a4 ... an) * (10 ^ m -1 ) + b1 b2 b3 b4 ...bm) / (10 ^ n)*(10 ^ m - 1)
        
   (3)化简到最后,分子分母可能会出现 不是最简的形式。 A / B ,则需要调用(A  /  gcd(A ,B)) / (B / gcd(A , B)) ,即已经化简完毕。
 



 

posted on 2011-07-10 10:48 kahn 阅读(459) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理