最も自然な対数

piの計算に関する投稿に触発されて、この方法でeを計算することにしました。 途中で、自然対数の関数を得ました。



画像



実は



#include <iostream> #define I r= #define l ; #define o #define x if(1+(d*2)*(1/(__*2))<=k)d++; #define e p+=d;d=1; #define h _++; #define s __++; double ln(double k){double p=0,n,y,r,d,_=0,__=0; I 3.30 loooooo I 3.25 loooooo I 3.20 loooooo I 3.15 loooooo I 3.10 loooooo I 3.05 loooooo I 3.00 loooooo I 2.95 loooooo I 2.90 loooooo I 2.85 loooooo I 2.80 loooooo I 2.75 looooooo I 2.70 looooooo I 2.65 looooooo I 2.60 looooooo I 2.55 looooooo I 2.50 looooooo I 2.45 looooooo I 2.40 loooooooo I 2.35 loooooooo I 2.30 loooooooo I 2.25 loooooooo I 2.20 loooooooo I 2.15 loooooooo I 2.10 loooooooo I 2.05 loooooooo I 2.00 loooooooo I 1.95 looooooooo I 1.90 looooooooo I 1.85 looooooooo I 1.80 looooooooo I 1.75 looooooooo I 1.70 looooooooo I 1.65 looooooooo I 1.60 looooooooo I 1.55 loooooooooo I 1.50 loooooooooo I 1.45 loooooooooo I 1.40 loooooooooo I 1.35 looooooooooo I 1.30 looooooooooo I 1.25 looooooooooo I 1.20 loooooooooooo I 1.15 loooooooooooo I 1.10 loooooooooooo I 1.05 loosssssssssso I 1.00 loohhhhhhhhhho I 0.95 loohhhhhhhhhheo I 0.90 loohhhhhhhhhheo I 0.85 loohhhhhhhhhhexo I 0.80 loohhhhhhhhhhexxo I 0.75 loohhhhhhhhhhexxxo I 0.70 loohhhhhhhhhhexxxxo I 0.65 loohhhhhhhhhhexxxxxo I 0.60 loohhhhhhhhhhexxxxxxo I 0.55 loohhhhhhhhhhexxxxxxx xo I 0.50 loohhhhhhhhhhexxxxxxx xxxo I 0.45 loohhhhhhhhhhexxxxxxx xxxxxxxo I 0.40 loohhhhhhhhhhexxxxxxx xxxxxxxxxxo I 0.35 loohhhhhhhhhhexxxxxxx xxxxxxxxxxxxxxxo I 0.30 loohhhhhhhhhhexxxxxxx xxxxxxxxxxxxxxxxxxxxo I 0.25 loohhhhhhhhhhexxxxxxx xxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxx I 0.20 loohhhhhhhhhhexxxxxxx xxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxx I 0.15 loohhhhhhhhhhexxxxxxx xxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxx I 0.10 loohhhhhhhhhhexxxxxxx xxxxxxxxxxxxxxxxxxxxx xxxxxxxxe return p/_; // 0 +1 +2 +3 +4 +5 }
      
      







原理は単純です-aの自然対数は、1からaまでのグラフ1 / xの下の面積です。



画像



したがって、グラフがより正確に描画されるほど、計算はより正確になります。 プロットについて少し。 記号sは単位セグメント、hは単位面積の2乗、eは関数f(x)= 1、xはセグメント上の1 / xグラフの下の領域(1、+ inf)を示します。

自然対数の機能を持ち、ln(e)= 1であることを知ることで、徹底的な検索によってeを見つけることは難しくありません。



 for(double i = 0; i <= 3; i += 0.01) if (ln(i) > 0.98) { std::cout << i << std::endl; break; }
      
      







いくつかの結果:



表現 価値 本当の意味
ln(2) 0.721053 0.69315
ln(2.7) 1 0.99325
ln(3) 1.09474 1.09861
ln(4) 1.35263 1.38629
ln(5) 1.54211 1.60943
e 2.7 2.718281828




完全なコードへのリンク



All Articles