Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.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
C++ 计算小数点并精确显示小数点后的数字_C++_C_Decimal_Floating Point Precision - Fatal编程技术网

C++ 计算小数点并精确显示小数点后的数字

C++ 计算小数点并精确显示小数点后的数字,c++,c,decimal,floating-point-precision,C++,C,Decimal,Floating Point Precision,给定一个分数(103993/33102),我需要在小数点后找到50000位 最初我在C++中使用了 SET精度(K)< /C> >,但小数点后只给出17位数字。我也试过了 sprintf (str, "%.500000f", num) 但结果是一样的 我需要一个能解决这个问题的算法,它不需要对小数点后的数字进行四舍五入,也就是说,它应该是精确的。解决这样一个问题的最好方法是解决一个非常简单的问题,然后在此基础上计算出算法。这样,您就不会感到困惑或失去您的位置,而且无论出现什么问题,算法都是相同

给定一个分数(103993/33102),我需要在小数点后找到50000位

最初我在C++中使用了<代码> SET精度(K)< /C> >,但小数点后只给出17位数字。我也试过了

sprintf (str, "%.500000f", num)
但结果是一样的


我需要一个能解决这个问题的算法,它不需要对小数点后的数字进行四舍五入,也就是说,它应该是精确的。

解决这样一个问题的最好方法是解决一个非常简单的问题,然后在此基础上计算出算法。这样,您就不会感到困惑或失去您的位置,而且无论出现什么问题,算法都是相同的。让我们看一下
4/3

  • 4变成3一次。我们还剩下一个。我们将
    1.
    输出一次。我们保留剩下的1

  • 我们把剩下的1乘以10得到10。3(我们的分母)是10的三倍。剩下1个

  • 我们输出
    3
    ,因为它输入了三次。我们还剩下一个

  • 我们转到步骤2,并根据需要重复多次


  • 只要分子和分母是正整数,同样的算法就是这样工作的。

    Float或double不能做到这一点,因为它们不够精确。其他人建议使用bignum库。这是可以做到的,但还有另一种直接处理整数的方法

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

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


    你真的在问我们如何进行长除法?!请告诉我你不是一个不知道如何做长除法的程序员。这是在四年级和五年级教的!试试这个页面。我知道人们在争论一个程序员需要多少高等数学,但是需要知道如何做基本的算术应该是没有争议的!。。。戴维施瓦茨:长除法到50000位是很难的,我怀疑大多数编码人员在没有库的情况下能做到这一点。(显而易见的答案是使用一个库)@Mooing Duck它实际上不是-一旦你意识到你所需要做的就是从较高数字的除法中结出余数,并存储/打印出你计算的每个数字的结果。这并不是说你在制作一个大的十进制库:)@Patashu:对,我把bignum/bignum搞混了,忘了bignum/int很简单。他应该能做长除法。