私は以下のコードを使用して可能な限り多くの精度桁を得るために系列表現を使ってeを近似しようとしていますが、計算する項の数に関係なく、同じままと思われる。すなわち:近似e - できるだけ多くの精度桁を取得する
2.71828198432922363281250000000000000000000000000000
は、それは間違っている、私のアプローチは、ですか? は、ここでは、コードです:
1 #include <stdio.h>
2 #include <iostream>
3 #include <math.h>
4 using namespace std;
5
6 float factorial (float a)
7 {
8 if (a > 1)
9 {
10 return (a * factorial (a-1));
11 } else
12 {
13 return 1;
14 }
15 }
16
17 int main()
18 {
19 float sum = 0;
20 int range=100000;
21
22 for (int i=0; i<=range;i++)
23 {
24 sum += pow(-1,i)/factorial(i);
25 }
26 sum = pow(sum,-1);
27 printf("%4.50f\n", sum);
28 }
あなたは、データ型の選択によって制限されています:あなたが得ます8桁目の誤差。 'float'の代わりに' long double'を使って、結果がやや良いかどうか調べてみましょう。 – dasblinkenlight
google for "すべてのコンピュータ科学者が浮動小数点数学について知っておくべきこと"あなたの条件が十分に小さくなると、彼らはもはや合計に影響を与えません。 –
@gspr:printfの前の最後の行に注意してください。もちろん、 'pow()'は非常に遅い方法です。 –