计算小数部分并以精确的方式显示小数点后的数字

时间:2013-03-05 05:06:49

标签: c++ c decimal floating-point-precision

给定分数(103993/33102),我需要找到此分数小数点后的50000位数。

最初我在C ++中使用了setprecision(k),但它在小数点后只给出了17位数。我也试过

sprintf (str, "%.500000f", num)

但结果是一样的。

我需要一种能够解决这个问题的算法,它不会使小数点后的数字四舍五入,即它应该是精确的。

2 个答案:

答案 0 :(得分:3)

解决如何解决这样的问题的最好方法是采取一个非常简单的问题,然后计算出算法。这样,你不会感到困惑或失去你的位置,无论问题如何,算法都是一样的。我们来看4/3

  1. 4进入3次。我们剩下1个。我们输入了1.一次。我们保留了1。

  2. 我们将剩下的1乘以10得到10. 3(我们的分母)进入10次三次。剩下1个。

  3. 我们输出3因为它进入了三次。我们还剩下1个。

  4. 我们转到第2步,并根据需要重复多次。

  5. 只要它们是正整数,这个算法就可以正常工作,无论分子和分母如何。

答案 1 :(得分:1)

Float或double不会这样做,因为它们不够精确。其他人建议使用bignum图书馆。这可以做到,但还有另一种方法可以直接使用整数。

可以使用称为模幂运算的技术来解决此问题。这使您可以计算所有数字而不会遇到精度问题。

幸运的是,已经写了一个如何做到这一点的答案:

Getting a specific digit from a ratio expansion in any base (nth digit of x/y)