C++ 计算小数点并精确显示小数点后的数字
给定一个分数(103993/33102),我需要在小数点后找到50000位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) 但结果是一样的 我需要一个能解决这个问题的算法,它不需要对小数点后的数字进行四舍五入,也就是说,它应该是精确的。解决这样一个问题的最好方法是解决一个非常简单的问题,然后在此基础上计算出算法。这样,您就不会感到困惑或失去您的位置,而且无论出现什么问题,算法都是相同
最初我在C++中使用了<代码> SET精度(K)< /C> >,但小数点后只给出17位数字。我也试过了
sprintf (str, "%.500000f", num)
但结果是一样的
我需要一个能解决这个问题的算法,它不需要对小数点后的数字进行四舍五入,也就是说,它应该是精确的。解决这样一个问题的最好方法是解决一个非常简单的问题,然后在此基础上计算出算法。这样,您就不会感到困惑或失去您的位置,而且无论出现什么问题,算法都是相同的。让我们看一下
4/3
1.
输出一次。我们保留剩下的13
,因为它输入了三次。我们还剩下一个只要分子和分母是正整数,同样的算法就是这样工作的。Float或double不能做到这一点,因为它们不够精确。其他人建议使用bignum库。这是可以做到的,但还有另一种直接处理整数的方法 一种称为模幂运算的技术可以用来解决这个问题。这使您可以计算所有数字,而不会遇到精度问题 幸运的是,如何做到这一点的答案已经写好了:
你真的在问我们如何进行长除法?!请告诉我你不是一个不知道如何做长除法的程序员。这是在四年级和五年级教的!试试这个页面。我知道人们在争论一个程序员需要多少高等数学,但是需要知道如何做基本的算术应该是没有争议的!。。。戴维施瓦茨:长除法到50000位是很难的,我怀疑大多数编码人员在没有库的情况下能做到这一点。(显而易见的答案是使用一个库)@Mooing Duck它实际上不是-一旦你意识到你所需要做的就是从较高数字的除法中结出余数,并存储/打印出你计算的每个数字的结果。这并不是说你在制作一个大的十进制库:)@Patashu:对,我把bignum/bignum搞混了,忘了bignum/int很简单。他应该能做长除法。