Python×インド式算数⑰インド式3乗計算の問題点





 ということで本日も3乗計算ですが。
 指摘しておきたいのは、この本の例題が11、12、103、2004という数の3乗なんですが、ここには弱点があります。弱点というか明らかに恣意的に並べられた数ってことが重要ですね。
 11の3乗は最初に比を求める際に、1/1=1となり大して問題は起こりません。
 12の3乗も同様に2/1=2ですし、103も03/1=3、2004も004/2=2です


 ところがじゃあ31をやろうかとなると1/3=0.333333……となります。
 これをじゃあどこまでで区切るか。一応、0.3で区切れば正確な答えは出るには出ます。29791ですね。51や71とかでも正確に出るには出ましたが、なぜ0.33333……を0.3で区切っても正確な値が出るのかについてはかなり謎だし曖昧です。
 これ恐らくそのうち正確な値が出なくなるんじゃないかなという不安に包まれてますが(笑)、まあ一応2桁3桁くらいの計算なら不都合は起こらないようです(多分)。
 だから何が脆いかって、11とか12とか15なら何もおかしくはないんですが、21とか31とか76とかになっていくと急激に怪しくなっていくというところが弱点だろうなと思われます。左<右であるうちはかなり大丈夫ですが、左>右になってしかもうまく割り切れない数になると扱いに困るという。もしやるとしても事前に結構な数をやって確かめて、ああ問題ないなということを把握したうえでないと使えないということですね。

 一応76とかみてみますか。
 76の3乗は438976(電卓)ですが。
 6を7で割ると0.85714285……となります。
 7の3乗で343。
 343×0.85で291.55。
 291.55×0.85で247.8175……
 まあちょっと厳しいですね。小数点以下がわらわらと表れている時点で難しいと思います。


 ・一応プログラムにやらせてみると、343、294、252、216という値を出しまして計算すると見事に438976となりますね。
 だから0.85ではまだダメで、0.85714あたりまでやってかつ切り捨てを絶妙なタイミングでやってやれば一応問題はない可能性はあります。
 いっそ0.86にして343×0.86=294.98を切り捨てて294とか。
 で出た294に0.86をかけて252.84として切り捨てて252……
 まあ難しいと思います(笑)
 今回は良くてもいずれ行き詰まるでしょうね。


 だからまあこういう厄介なヤツに出会ったら素直に電卓を使いましょうという話ですね(笑)



この記事へのコメント

にほんブログ村 ゲームブログ ゲーム評論・レビューへ
にほんブログ村