手計算が面白い                   戻る

 平方根の計算ができる電卓が、ほぼタダ同然で手に入る世の中にあって、いろいろな数
学的値が実感できない人が増えつつある。

  の値が把握されていないものだから、底辺、垂辺の長さが、1 と 2 の直角三角形を
書くと、斜辺の長さは、何も考えずに、 と自信満々に答える。相当に、2:1: の比
をもつ三角形の呪縛にはまっているという感じである。

  は、2 より小さい数なので、この3辺の組合せでは、決して斜辺の長さとはなり得ない。
小学・中学・高校において、数の値を把握する訓練の必要性を痛感する。

 例えば、中学3年で学習する「分母の有理化」は、数の値を把握するための計算なのであ
り、何も「分母に無理数があると美しくないから」という理由で有理化するわけではないので
ある。もっと詳しく言及すれば、Q()=Q[]が真の意味するところであるが...。

 ここら辺の認識が現在の中学・高校生にはないように感じられる。だから、分母に無理数
を残したままでよいというと、一様に生徒は戸惑いを覚えるようだ。いままで、機械的に分母
の有理化を行ってきたツケだろう。

 みなさんは、次の問にすぐ答えることができるだろうか?

問  ≒1.732 であることを用いて、次の数はおおよそいくら位か?

 (1)             (2)   

(答) (1) 0.577  (2) 2.366

 手計算で平方根、立方根を計算する方法も知られているので、もし興味をもたれたら是
非、挑戦して欲しいと思う。

 このページでは、いろいろな値を手計算で求める方法についてまとめてみたい。

例  の値を小数第1位まで正しく求めよ。

(解) 42<23<52 で、4< <5 より、  =4+α (0<α<1) とおける。

両辺を平方して式を整理すると、 α2+8α−7=0  という2次方程式が得られる。

このとき、10α (αの10倍を考えることにより、αの小数第1位を求める!)を X とおく。

α=X/10 を、さきほどの2次方程式に代入して式を整理すると、

グラフによる解法      X2+80X−700=0

 F(X)=X2+80X−700 とおくと、

     F(7)=−91<0、F(8)=4>0

 したがって、左図より、10α=X=7.・・・ となるので、

  α=0.7・・・ であることが分かる。
 

 以上から、  ≒ 4.7・・・ となる。  (終)

 この方法を順次続ければ、平方根の値により近い小数が得られる。

(因みに、電卓を用いれば、 ≒ 4.79583・・・ である。)

例  の値を小数第1位まで正しく求めよ。

 この値は、関数電卓を用いれば、 =0.630929746・・・ である。関数電卓がなく
ても、小数第1位ぐらいまでは手計算で、いつも求まるようにしておきたいものだ。

(解) 26<34 より、2<30.666・・・ だから、 <0.666・・・

 また、35<28 より、30.625<2 だから、0.625<

したがって、0.625< <0.666・・・ となり、 ≒0.6・・・ であることが分かる。

 この手計算で、 の小数第2位を決定することは難しい。

 220=1048576、313 =1594323 で、220<313 より、2<30.65 だから、

 0.625< <0.65 を求めるのが精一杯である。


(追記) 平成25年8月30日付け

 当HP読者のHN「ももっこうの父」さんよりご投稿頂きました。

 上記の計算で、指数を1ずつ小さくして、219=524288、312=531441で、

 219<312 より、2<30.63158 だから、 0.625< <0.632 と求まる。

これより、 の小数第2位は、2または3ということが分かる。さらに続けて、

 246=70368744177664、329=68630377364883 で、246>329 より、

 2>30.6304 だから、 0.6304< <0.632 と求まる。

 これより、 の小数第2位は、3ということが分かる。


(コメント) 246と329の計算は大変ですが、手計算でやってやれないことはないですね!
   ただ、この2数の組を探す方がもっと大変かも...。ももっこうの父さんに感謝します。


(追記) DD++ さんからご投稿いただきました。(平成29年1月25日付け)

 log3 2 を(手計算で)求めよ、という問題について、2=3x の解をファレイ数列的に有理数
近似していけばいいのではないかということを思いつきました。

 まず、底と真数のうち小さい方の1乗と大きい方の0乗を比較します。
(2= ) 2^1 > 3^0 ( =1) …… (1)

 次に、小さい方の1乗と大きい方の1乗を比較します。
(2= ) 2^1 < 3^1 ( =3) …… (2)

以下、最後に出てきた左辺が大きい式と、最後に出てきた右辺が大きい式で辺々積をとり、
大小を判定します。

(1)(2) の辺々で積をとって比較  (4= ) 2^2 > 3^1 ( =3) …… (3)

(3)(2) の辺々で積をとって比較  (8= ) 2^3 < 3^2 ( =9) …… (4)

(3)(4) の辺々で積をとって比較  (32= ) 2^5 > 3^3 ( =27) …… (5)

(5)(4) の辺々で積をとって比較  (256= ) 2^8 > 3^5 ( =243) …… (6)

(6)(4) の辺々で積をとって比較  (2048= ) 2^11 < 3^7 ( =2187) …… (7)

(6)(7) の辺々で積をとって比較  (524288= ) 2^19 < 3^12 ( =531441) …… (8)

(6)(8) の辺々で積をとって比較  (134217728= ) 2^27 > 3^17 ( =129140163) …… (9)

(9)(8) の辺々で積をとって比較  (70368744177664= ) 2^46 > 3^29 ( =68630377364883)

で、 3^(29/46) < 2 < 3^(12/19) が得られ、 0.6304 < 29/46 <log3 2< 12/19 < 0.6316 を見
出すことができます。

 この方法の何が嬉しいかといえば、掛け算を2回するごとに、これまでより良い不等式が必
ず手に入る点。せっかく計算したのに当てが外れてガッカリということが一切ありません。

 運悪く不等号が同じ側に連続すると(つまりlogの値が簡単な分母の有理数に近いと)収束
が非常にもたつくという欠点はありますが。

途中から必要な桁数分の有効数字にしても大丈夫と思います。

10^0 < 2^1 ( =2)
10^1 > 2^1 ( =2)
10^1 > 2^2 ( =4) ---> log[10]2 < 1/2 = 0.5
10^1 > 2^3 ( =8) ---> log[10]2 < 1/3 < 0.334
10^1 < 2^4 ( =16) ---> log[10]2 > 1/4 = 0.25
10^2 < 2^7 ( =128) ---> log[10]2 > 2/7 > 0.285
10^3 < 2^10 ( =1024) ---> log[10]2 > 3/10 = 0.3
10^4 > 2^13 ( =8192) ---> log[10]2 < 4/13 < 0.30770
10^7 > 2^23 ( =0.8389×10^7)  ---> log[10]2 < 7/23 < 0.30435
10^10 > 2^33 ( =0.8590×10^10)  ---> log[10]2 < 10/33 < 0.30304
10^13 > 2^43 ( =0.8796×10^13)  ---> log[10]2 < 13/43 < 0.30233
10^16 > 2^53 ( =0.9007×10^16)  ---> log[10]2 < 16/53 < 0.30189
10^19 > 2^63 ( =0.9223×10^19)  ---> log[10]2 < 19/63 < 0.30159
10^22 > 2^73 ( =0.9444×10^22)  ---> log[10]2 < 22/73 < 0.30137
10^25 > 2^83 ( =0.9671×10^25)  ---> log[10]2 < 25/83 < 0.30121
10^28 > 2^93 ( =0.9903×10^28)  ---> log[10]2 < 28/93 < 0.301075
10^31 < 2^103 ( =1.0141×10^31)  ---> log[10]2 > 31/103 > 0.300971
10^59 < 2^196 ( =1.0043×10^59)  ---> log[10]2 > 59/196 > 0.301020
10^87 > 2^289 ( =0.9946×10^87)  ---> log[10]2 < 87/289 < 0.3010381
10^146 > 2^485 ( =0.9989×10^146)  ---> log[10]2 < 146/485 < 0.30103092
10^205 < 2^681 ( =1.0032×10^205)  ---> log[10]2 > 205/681 > 0.30102790
10^351 < 2^1166 ( =1.0021×10^351)  ---> log[10]2 > 351/1166 > 0.30102915
10^497 < 2^1651 ( =1.0010×10^497)  ---> log[10]2 > 497/1651 > 0.30102967
10^643 ? 2^2136 ( =0.9999×10^643)  ---> log[10]2 ? 643/2136 = 0.30102996……
(今回の有効数字だと最後の大小は非常にあやしいので不採用)

で、 0.30102967 < 497/1651 < log10 2< 146/485 < 0.30103092 を得ました。

 特に、最後の 643/2136 は、仮数部分がぐっと1に近づいたので、大小は不明ですがかな
りよい近似分数になっているのではないかと考えられます。

 右の計算は収束速度の参考にやっただけで、実際は必要な行だけやれば十分です。これ
なら手計算でもなんとかなるのではないでしょうか。

 3/10 に値が近いせいで、3桁目の決定にもたつきすぎなことと、その後は一気に進行する
ことが見て取れますね。log10 3 はもっと早く求まると思います。


 らすかるさんからのコメントです。(平成29年1月25日付け)

 log の手計算は以前考えたことがありますが、以下の公式を使うと効率良く精度が上げら
れます。(以下、底のない対数は自然対数です)

 y = (x-1)/(x+1) とすると、 logx = log((1+y)/(1-y)) = 2(y + y^3/3 + y^5/5 + …) なので、

x=(t+1)/t とすると、 y=1/(2t+1) となり、

 log((t+1)/t) = 2(1/(2t+1) + 1/((2t+1)^3・3) + 1/((2t+1)^5・5) + …)

 これを使って、log3 2を求めます。t が大きいほど精度が良いので、小さい t を使うのは
避け、まず、

 log(7/6)≒2{1/13+1/(13^3・3)}≒0.154150
 log(8/7)≒2{1/15+1/(15^3・3)}≒0.133531
 log(9/8)≒2{1/17+1/(17^3・3)}≒0.117783

の3つを求めると、

 log2=2{log(7/6)+log(8/7)}+log(9/8)≒0.693145
 log3=3{log(7/6)+log(8/7)}+2log(9/8)≒1.098609

より、log3 2=log2/log3≒0.693145/1.098609≒0.630930 のように求まります。

 2/(13^5・5)≒10^(-6) なので、上記のように級数2項で6桁近くの精度があります。級数を1
項増やすと精度は2桁以上上がります。もう1つ、log(10/9)を求めておけば、

 log2=2{log(7/6)+log(8/7)}+log(9/8)
 log3=3{log(7/6)+log(8/7)}+2log(9/8)
 log4=2log2
 log5=log4+log(9/8)+log(10/9)
 log6=log2+log3
 log7=log6+log(7/6)
 log8=3log2
 log9=2log3
 log10=log2+log5

のように、log2〜log10 まで求められますので、log10 2〜log10 9も算出できることになります。


 ますた〜さんからのコメントです。(平成29年1月26日付け)

 まさにオイラーの用いた方法ですね。これは試行錯誤で気付いたものなのでしょうか?そ
れとも収束が速いと何かしらの方法であらかじめ解っていたのでしょうか?収束の速さを計
算することなくはかる方法があるか以前ふと思ったこともあって気になりました。もしよけれ
ば教えてください。


 らすかるさんからのコメントです。(平成29年1月27日付け)

 オイラーの用いた方法だったのですか、それは存じませんでした。上記は試行錯誤で気付
きました。最大約2万桁を扱う自作電卓プログラムを作るのに、いろいろな計算で収束を速く
する必要があり、logに限らず他もいろいろ考えました。


 ますた〜さんからのコメントです。(平成29年1月28日付け)

 なるほどプログラムが動機だったのですね。ありがとうございました。


例  の値を小数第1位まで正しく求めよ。

(解) 52<33、37<55 より、1.4< <1.5 だから、 ≒1.4・・・  (終)

例  のおおよその値を求めよ。

(解) 23=8≒10 だから、3 ≒ 1   よって、 ≒ 0.3・・・

 23<32<10 だから、3 <2 <1

よって、0.45・・・< <0.5 の範囲の数であることが分かる。  (終)


(追記) 平成25年10月26日付け

 上記の例からも分かるように、数のおおよその値を求める場合、不等式による評価だけ
では何れ限界がくる。

 最近、Niklaus Wirth さんのHPサイト「Programming in Oberon」の14頁に、対数を求める
プログラムが載っていることを、都立深川高校の加藤 一さんにお教えいただいた。

 次のような手順で求めるらしい。

(1) log10x=(1/2)log102

(2) 2≧10 ならば、 log102=1+log10(x2/10)

 以降、(1)(2)を繰り返す。

例 実際に、このアルゴリズムで計算してみると、

 =1/22+1/25+1/26+1/28+1/212+・・・

 =0.25+0.03125+0.015625+0.0039062+0.0002441+・・・

 =0.3010253・・・・

上記の計算から、小数第3位までは正しい値であるものと推察される。

(参考)  ≒ 0.3010 2999 5663 9811 9521 3738 8947 2449 ・・・


(コメント) 上記の計算を手計算で行うのは少し無理がありますが、普通の電卓で十分計算
     可能ですね!

 同様にして、 も計算してみた。

log103=(1/2)log109=(1/4)log1081=1/4+(1/4)log108.1

 =1/4+(1/8)log1065.61=1/4+1/8+(1/8)log106.561

 =1/4+1/8+(1/16)log1043.046721

 =1/4+1/8+1/16+(1/16)log104.3046721

 =1/4+1/8+1/16+(1/32)log1018.530201

 =1/4+1/8+1/16+1/32+(1/32)log101.8530201

 =1/4+1/8+1/16+1/32+(1/64)log103.4336834

 =1/4+1/8+1/16+1/32+(1/128)log1011.790181

 =1/4+1/8+1/16+1/32+1/128+(1/128)log101.1790181

 =1/4+1/8+1/16+1/32+1/128+(1/2048)log1013.942072

 =1/4+1/8+1/16+1/32+1/128+1/2048+(1/2048)log101.3942072

 =0.25+0.125+0.0625+0.03125+0.0078125+0.0004882+・・・

 =0.4770507・・・

 上記の計算から、小数第3位までは正しい値であるものと推察される。

(参考) log103 ≒ 0.4771 2125 4719 6624 3729 5027 9032 5512 ・・・


(コメント) アルゴリズムは理解できたが、とっても収束が遅いような...そんな雰囲気。


例 220 は何桁の数で、その首位の数は何か?ただし、 ≒0.3010。

(解)  ≒ 0.3010  だから、20 ≒6.02

 よって、106<220<107 となり、7桁の数であることが分かる。

 また、0<0.02<0.3010 より、6<6.02<6+

 したがって、106<220<2・106 だから、220 の首位の数は、1 である。

(因みに、220 =1048576 である。)

例 (1/2)20 は小数第何位に初めて0でない数字が現れるか?また、その数字は

 何か? ただし、 ≒0.3010 、 ≒0.4771 とする。


(解) −20 ≒ −6.02 なので、10-7<(1/2)20<10-6

よって、小数第7位に初めて0でない数字が現れる。

また、−6.02=−7+0.98 で、2×0.4771<0.98<1 だから、

 −7+2× <−6.02 <−6 すなわち、9・10-7<(1/2)20<10-6

したがって、求める数は、9 である。

(因みに、(1/2)20 =0.00000095367・・・ である。)

例 (0.99)10 の値を小数第2位まで正しく求めよ。

(解) 2項定理 (a+b)=a+nan-1b+n(n-1)/2an-22+・・・+b を用いて、

 (0.99)10=(1−0.01)10

 =1−10・0.01+45・0.0001−120・0.000001+・・・

 ≒0.90・・・   (第3項の45・0.0001以下急速に小さくなる!)

例  の値を小数第3位まで正しく求めよ。

 ただし、 ≒0.3010 、 ≒0.4771 とする。


 この問題は、東北大学 理系 後期(2008)の入試問題の一部である。

(解) 4=log102401 であるのに対して、その近くの値として

log102400=log1024×100

 =log103+3log102+2

 =0.4771+3×0.3010+2=3.3801  であることに注目する。

 ここで、 log102401−log102400=log10(1+1/2400)

ところで、 x≧0 のとき、 log(1+x)≦x が成り立つ。

 実際に、 F(x) = x−log(1+x) とおくと、F’(x) = 1−1/(1+x) = x/(1+x) ≧0

であるので、 F(x) は単調に増加する。 また、 F(0) = 0 であるので、

 x≧0 のとき、 F(x) ≧ 0 となり、 log(1+x) ≦ x となる。

このことから、

 log102401−log102400

 =log10(1+1/2400)

 <log(1+1/2400)≦1/2400=0.0004166・・・

より、 log102401<log102400+0.0004166・・・=3.3805166・・・

すなわち、 3.3801<4<3.38052 より、0.845025<<0.84513

なので、 の値を小数第3位まで正しく求めれば、 0.845 となる。  (終)


(追記) 平成30年7月11日付け

 数研通信No.91(数研出版)で、埼玉県立豊岡高校の結川義明先生が、この
値について考察されている。興味深く拝読させていただいた。

 1桁の常用対数は、すべて の値を用いて求められる。

 実際に、

log104=2

log105=1−

log106=

log108=3

log109=2

 さて、問題は、log107 である。上記のように を用いた等式で表すことは
諦める必要がありそうだが、不等式で評価するという技が有効である。

 log107 の値を小数第2位まで求めたい場合

 不等式 4<7<5 において、

 log10=2+(1/2)

  =0.3010、=0.4771 として、log10=0.84055

 同様にして、

 log10=1−+(1/2)=1−(1/2)=0.8495

 よって、 0.84055<<0.8495 から、 =0.84・・・ と言える。

 log107 の値を小数第3位まで求めたい場合

 上記の東北大学の問題のように解いても得られるが、次のような別解が示されている。

  4=log102401>log102400 であることに注目して、

  log102400=log1024×100=log103+3log102+2=3.3801

  よって、 >0.845025

 また、 24・3×210=48×1024=49152>49000=72×103 に注目して、

 log104・3×210>log102×103

 すなわち、 14>2+3 より、

  <(14−3)/2=0.84555

 よって、 0.845025<<0.84555 から、 =0.845・・・ と言える。


(コメント) 不等式の評価により、何とか小数第3位までは正しく求められたが、さらに、小
      数第4位まで正しく・・・と問われると、かなり難しい...。


(追記) 平成20年7月30日付け

 当HPの掲示板「出会いの泉」にHN「まったりーな」さんが関数電卓について書き込みを
された。

 関数電卓が、Windows に標準で付いているということを伺って、いろいろ遊んでみた。

手持ちのカシオの関数電卓を久しぶりに引っ張り出して使ってみたら、液晶部分が黒ずんでいてひど
くガッカリした!私のお気に入りだったのに...。


 普通の電卓も関数電卓もともに32桁の表示で、かなり高性能である。これだと、もう関数
電卓を別途購入する必要は全くないですね!

 常用対数は通常4桁くらいしか覚えておらず、その先がどうなっているか興味があったの
で計算させてみた。

 log102 ≒ 0.3010 2999 5663 9811 9521 3738 8947 2449 ・・・

 log103 ≒ 0.4771 2125 4719 6624 3729 5027 9032 5512 ・・・

 掲示板で、「まったりーな」さんは、次の問題を提起された。

 3の1000乗を常用対数表を使って、近似値を求めたい

 数学Uで学ぶ手法では、次のように解かれる。

 log101000=1000×log10

通常は、log103 ≒ 0.4771 より、 log101000 ≒ 477.1 となるので、

 log10 a =0.1 となる数 a をとれば、a はだいたい 1.26〜1.58 の間の数で、

 31000 ≒ a × 10477

と書けることになる。

 このことから、31000 は、478桁の整数で、首位の数は、1 で、末位の数も 1 となる。

ここら辺が、常用対数表で求められる限界である。

 Windows に標準でついている関数電卓に出会うまでは、上記の解答で満足していた
が、「まったりーな」さんに教えていただいた関数電卓を使うとさらに詳しく調べられる。

 log103 ≒ 0.4771 2125 4719 6624 3729 5027 9032 5512 ・・・

なので、

 log101000=1000×log10

=477.1212 5471 9662 4372 9502 7903 2551 2 ・・・

 よって、 log10 a =0.1212 5471 9662 4372 9502 7903 2551 2 ・・・

となる a の値を詳しく求めれば、31000 に関する情報も詳しくなる。

 関数電卓を用いると、

  a ≒ 1.3220 7081 9480 8066 3689 0455 2597 664 ・・・

と簡単に求められる。(「Inv」と「log」を活用すればよい!)

 このことから、怖ろしく大きい数 31000 のだいたいの様子が分かる。

 1000 ≒ 1322 0708 1948 0806 6368 9045 5259 7664 ・・・・ ・・・1

 これは、ちょっと感動ものですね...!

 こんな面倒なことをせず関数電卓を使えば、

 1000 ≒ 1322 0708 1948 0806 6368 9045 5259 7521 ・・・・ ・・・1

と出る。

 先頭から30番目以降の数に違いがあるので、ここら辺から誤差が生じているのだろう。

ちょっと、気になりますね...?


(コメント) 関数電卓は、今後私とお友達になれそうです。関数電卓のことを教えていただ
      いた「まったりーな」さんに感謝いたします。


(追記) 平成28年12月6日付け

 最近、岩手大学前期理系(平成12年度)の入試問題に、上記の話題に関連する問題が
出題されていることに気づかされた。

問題 80<81および243<250であることに注意して、

   3/10<log102<23/75、19/40<log103<12/25

であることを示せ。

(解) 210>103 より、 10log102>3 なので、 3/10<log102 が言える。

 さらに、 80<81 より、 3log102+1<4log10

 243<250 より、 5log103<3−2log102 なので、4log103<12/5−(8/5)log10

 よって、 3log102+1<12/5−(8/5)log102 より、

   (23/5)log102<12/5−1=7/5 なので、 log102<7/23

 7/23−23/75=(525−529)/(23・75)<0 なので、 7/23<23/75

 よって、 3/10<log102<7/23<23/75

 3log102+1<4log103 より、 3(3/10)+1<4log103 なので、 19/40<log10

 また、 5log103<3−2log102<3−2(3/10)=12/5 より、 log103<12/25

 よって、 19/40<log103<12/25


(コメント) 23/75=0.30666・・・ に対して、 7/23=0.3043478・・・ なので、

 問題文の評価式 3/10<log102<23/75 よりも、3/10<log102<7/23 の方が

 より厳しい評価となる。また、7/23<23/75 から、log102<23/75 を示したが、直接

に示すことも可能である。

  3log102+1<4log103 と log103<12/25 から、 3log102+1<48/25

 よって、 log102<(48/25−1)/3=23/75

 上記の計算から、確実に言えることは、 log102≒0.30・・・ であることと、

19/40=0.4775・・・ 、12/25=0.48 から、 log103≒0.4・・・ である。


(追記) 次の日本大学(1997)の問題も手計算の魅力を追求した問題である。
    (平成29年1月25日付け)

問題 101100の下8桁は?

(解) 2項定理より、

101^100= (100+1)^100

= 1^100 + 1001・100 + 1002・100^2 + 1003・100^3 + 1004・100^4 + ・・・

 求めるのは下位8桁なので、上の式から

 1^100 + 1001・100 + 1002・100^2 + 1003・100^3

の値を求めれば十分である。(100^4は9桁の数)

 よって、

 1^100 + 1001・100 + 1002・100^2 + 1003・100^3

= 1 + 100・10^2 + 4950・10^4 + 161700・10^6

= 161749510001

より、求める下8桁は、「49510001」である。


(追記) 令和6年1月29日付け

 電卓を用いると、 =3.605551275・・・ である。

 このの「整数部分、少数第1位、小数第2位を求めよ」という問題が、

令和6年1月14日に行われた大学入学共通テスト 数学 I+A の第1問[1]で出題された。

 計算の方法は、2の小数部分を評価する手法が取られた。

 2の小数部分を a とおき、b=1/a の取り得る値の範囲を求めて、の近似値が
求められる。

 実際に、7<2<8 から、2の整数部分は、7 なので、小数部分 a は、

a=2−7 となる。このとき、b=1/a=1/(2−7)=(2+7)/3 において、

7<2<8 から、14/3<b<5 となる。よって、 1/5<a<3/14 となる。

 1/5<2−7<3/14 なので、 18/5<<101/28

 ここで、18/5=3.6 、101/28=3.607・・・ なので、

の整数部分は3で、小数第1位の数字は6、小数第2位の数字は0であることが分かる。

 「2」では、小数第2位までしか正しく計算されない。一般の「k」に、この手法を用

いて、の近似値を追求することにしよう。

 「5」では、18<5<19 なので、a=5−18 とおき、1/a を求める。

1/a=5+18 より、 36<1/a<37 なので、 1/37<a<1/36

すなわち、 (18+1/37)/5<<(18+1/36)/5 より、

 3.6054・・・<<3.6055・・・

 よって、の小数第3位が5であることが確かめられた。

 上記の計算から分かるように、小数第4位がまだ未確定である。もう少し計算を続けよう。

 「15」では、54<15<55 なので、a=15−54 とおき、1/a を求める。

1/a=(15+54)/9 より、 12<1/a<109/9 なので、 9/109<a<1/12

すなわち、 (54+9/109)/15<<(54+1/12)/15 より、

 3.60550・・・<<3.60555・・・

 よって、の小数第4位が5であることが確かめられた。


の小数第4位を求めるのに、「15」の計算が必要であった。それほど能率のい
 い方法ではないのかもしれない。


 DD++ さんからのコメントです。(令和6年2月1日付け)

 について、さらにその先を追究したいと思います。

 (5)^2−18^2=1 と右辺が 1 (または -1)になるものを得た時点で、あとは、

(5−18) (5+18)=1 の両辺を n 乗するだけで簡単に精度を高められます。

・2乗の場合

(649−180) (649+180)= 1 と 1298 < 649+180 < 1299 より、

(649−1/1298)/180 << (649−1/1299)/180 すなわち、

3.60555127546…… << 3.60555127876…… で、小数点以下 8 桁まで正しい。

・3 乗の場合

(6485−23382) (6485+23382)= 1 と 46764 < 6485+23382 < 46765

より、 (23382+1/46765)/6485 <<(23382+1/46764)/6485 すなわち、

3.6055512754639187…… << 3.6055512754639892 で、

小数点以下 13 桁まで正しい。

 = 3.6055512754639892931…… と比較すればわかるように、偶数乗では下限が、奇
数乗では上限がかなり精度のいい近似になります。
(1乗の時も実は上限側はかなり精度がよい)


(コメント) DD++ さん、さらなる追求をありがとうございます。


 らすかるさんからのコメントです。(令和6年2月1日付け)

 連分数の打ち切りとの関係

=[3;1,1,1,1,6,1,1,1,1,6,1,1,1,1,6,…] において、

 [3;1,1,1,1] = 18/5
 [3;1,1,1,1,6,1,1,1,1] = 649/180 = (18+1/36)/5
 [3;1,1,1,1,6,1,1,1,1,6,1,1,1,1] = 23382/6485
 [3;1,1,1,1,6,1,1,1,1,6,1,1,1,1,6,1,1,1,1] = 842401/233640 = (649-1/1298)/180
 [3;1,1,1,1,6,1,1,1,1,6,1,1,1,1,6,1,1,1,1,6,1,1,1,1] = 30349818/8417525
 [3;1,1,1,1,6,1,1,1,1,6,1,1,1,1,6,1,1,1,1,6,1,1,1,1,6,1,1,1,1] = 1093435849/303264540 = (23382+1/46764)/6485

 なお、上と重複しますが、

(649-1/1298)/180 = 3.60555127546… = [3;1,1,1,1,6,1,1,1,1,6,1,1,1,1,6,1,1,1,1]

(649-1/1299)/180=3.60555127876… = [3;1,1,1,1,6,1,1,1,1,6,1,1,1,1,3]

(23382+1/46765)/6485=3.60555127546391878… = [3;1,1,1,1,6,1,1,1,1,6,1,1,1,1,6,1,1,1,1,6,2,2,3,3,3]

(23382+1/46764)/6485=3.60555127546398929… = [3;1,1,1,1,6,1,1,1,1,6,1,1,1,1,6,1,1,1,1,6,1,1,1,1,6,1,1,1,1]

から、

 (649−1/1298)/180 << (649−1/1299)/180

 (23382+1/46765)/6485 <<(23382+1/46764)/6485

 それから、上の流れを見ると、

18/5 = 3.6

(18+1/(18*2))/5 = 649/180 = 3.60555…

(649-1/(649*2))/180 = 842401/233640 = 3.60555127546…

(842401-1/(842401*2))/233640 = 1419278889601/393637139280 = 3.60555127546398929311922…

(1419278889601-1/(1419278889601*2))/393637139280
= 4028705132934095091878401/1117361763886065161254560
= 3.605551275463989293119221267470495946251296573845…(小数はと一致する桁のみ)

のように計算することで精度を倍々にすることができますね。


 DD++ さんからのコメントです。(令和6年2月1日付け)

 ペル方程式の解の構成から着想を得ているので、連分数展開と関係があるのは、まさに
その通りです。らすかるさんの方法で疑問なんですが、倍精度で一致していく保証はどこか
ら取るのでしょう?


 らすかるさんからのコメントです。(令和6年2月1日付け)

 DD++ さんの「2乗の場合」の計算から言えているような気がしますが、違いますかね?

 (a-b)(a+b) = 1 のとき、(a-b)^2 = a^2+13b^2-2ab = 2a^2-1-2ab

 (2a^2-1)/(2ab) = (a-1/(2a))/b となり、これは、a/b と比較して精度が2倍

 ちょっと雑だったかも知れませんので補足します。

 (a-b)(a+b) = 1 のとき、

 a-b = 1/(a+b) より、a/b- = 1/{b(a+b)}

最初の式を2乗すると、

 (a-b)^2(a+b)^2 = 1 より、2a^2-1-2ab = 1/(a+b)^2

(2a^2-1)/2ab- = 1/{2ab(a+b)^2}<1/{b(a+b)}^2 = (a/b-)^2

 よって、 (a-1/(2a))/b-<(a/b-)^2

もう一つ補足。

 (a-b)(a+b) = -1 の場合(5-18 = 1 のような場合)は、13b^2 = a^2-1 でなく、

13b^2 = a^2+1 となりますので、 (a-b)^2 = a^2+13b^2-2ab = 2a^2+1-2ab

より、(2a^2+1)/(2ab) = (a+1/(2a))/b のように、1箇所符号が変わりますが、他は同じです。

 一度2乗した後は、a-b = 1 の形になりますので、(a+1/(2a))/b のようにプラスになる
可能性があるのは初回だけです。


 DD++ さんからのコメントです。(令和6年2月2日付け)

 私のは、3.60555127546…… << 3.60555127876…… と上下から挟んでるので、

・3.60555127 までは確定
・続きも 546 くらいまであってそう(予想)

というように証明と予想を区別して出しています。


 らすかるさんからのコメントです。(令和6年2月2日付け)

 DD++さんが書かれている評価としてはその通りですね。しかし、計算は2乗していることか
ら、(言い方が雑ですが)との誤差が2乗されていて、精度が2倍になっていることが見
てとれますね。

 私が書いた上の計算を見ると、実際には2乗よりさらに小さくなっている(2乗の約0.14倍)
こともわかります。

 実際、上記で書いた計算でも、正しい小数点以下の桁数が、2桁、5桁、11桁、23桁、48桁
のように2倍以上になっていますね。

 この計算方法は、以外にも使えて、実際にいくつか計算してみましたが、

は、7/5 = 1.4 から始めて、5 回の計算で、72 桁
は、7/4 = 1.75 から始めて、5 回の計算で、71 桁
は、9/4 = 2.25 から始めて、5 回の計算で、78 桁
は、5/2 = 2.5 から始めて、5 回の計算で、62 桁
(いずれも桁数は真値と一致している小数点以下の桁数)

のようになっていました。せっかく計算したので、実際の計算を書いておきましょう。



7^2-(5)^2 = -1(差が±1であることは重要)
7/5 = 1.4
(7+1/(7*2))/5 = 99/70 (7-5<0 なので、ここだけ「+」)
(99-1/(99*2))/70 = 19601/13860
(19601-1/(19601*2))/13860 = 768398401/543339720
(768398401-1/(768398401*2))/543339720 = 1180872205318713601/835002744095575440
(1180872205318713601-1/(1180872205318713601*2))/835002744095575440
= 2788918330588564181308597538924774401/1972063063734639263984455073299118880
= 1.414213562373095048801688724209698078569671875376948073176679737990732478…



7^2-(4)^2 = 1
7/4 = 1.75
(7-1/(7*2))/4 = 97/56 (7-4>0 なので、これは「−」、以下、も同じ)
(97-1/(97*2))/56 = 18817/10864
(18817-1/(18817*2))/10864 = 708158977/408855776
(708158977-1/(708158977*2))/408855776 = 1002978273411373057/579069776145402304
(1002978273411373057-1/(1002978273411373057*2))/579069776145402304
= 2011930833870518011412817828051050497/1161588808526051807570761628582646656
= 1.73205080756887729352744634150587236694280525381038062805580697945193301…



9^2-(4)^2 = 1
9/4 = 2.25
(9-1/(9*2))/4 = 161/72
(161-1/(161*2))/72 = 51841/23184
(51841-1/(51841*2))/23184 = 5374978561/2403763488
(5374978561-1/(5374978561*2))/2403763488 = 57780789062419261441/25840354427429161536
(57780789062419261441-1/(57780789062419261441*2))/25840354427429161536
= 6677239169351578707225356193679818792961/2986152136938872067784669198846010266752
= 2.236067977499789696409173668731276235440618359611525724270897245410520925637804…



5^2-(2)^2 = 1
5/2 = 2.5
(5-1/(5*2))/2 = 49/20
(49-1/(49*2))/20 = 4801/1960
(4801-1/(4801*2))/1960 = 46099201/18819920
(46099201-1/(46099201*2))/18819920 = 4250272665676801/1735166549767840
(4250272665676801-1/(4250272665676801*2))/1735166549767840
= 36129635465198759610694779187201/14749861913749949808286047759680
= 2.44948974278317809819728407470589139196594748065667012843269256…


 DD++ さんからのコメントです。(令和6年2月2日付け)

 いえ、あの、元の共通テストの問題はご覧になってますかね?この問題はどれだけ近い有
理数を作れるかではなく、真値がわからない状態で、上から n 桁を確定したいという意図の
問題です。なので、「実際の真値を見ると上から n 桁合っている」だけなのは、それほど価値
はないのですよ。


 らすかるさんからのコメントです。(令和6年2月2日付け)

 いいえ、拝見していません。最初から、「このように計算すると精度の高い値を得ることが
出来ますね」という、元の問題とは関係なく(私の)興味がある計算を書いただけのつもりで
す。元の問題から話がそれてはいけなかったのでしたら、ごめんなさい。


 DD++ さんからのコメントです。(令和6年2月2日付け)

 逸れていけないことはないですが、別の話だと断りを入れてから始めないと、ただ無意味
に場を混乱させるだけかと思います。

 そして、近い有理数を得たいだけなのであれば、

(5-18)^16 = 4028705132934095091878401 - 1117361763886065161254560

より・・・(略)

で、わざわざ倍々計算を辿らなくても 1 行の式で 48 桁合わせられますよ。


(追記) DD++ さんからご投稿いただきました。(令和6年9月15日付け)

 常用対数値の手計算の話題です。

 先日、私はふと 4374=2・37 と 4375=54・7 がどちらも 1 桁の素因数しか持たないことに
気づきました。そして、224=25・7 と 225=32・52、2400=25・3・52 と 2401=74 も同様の
性質を持つと知っていた私は、以下のような計算を得ました。log は全て常用対数です。

 224 ≒ 225 より、 5 log 2 + log 7 ≒ 2 log 3 + 2 log 5

 2400 ≒ 2401 より、 5 log 2 + log 3 + 2 log 5 ≒ 4 log 7

 4374 ≒ 4375 より、 log 2 + 7 log 3 ≒ 4 log 5 + log 7

そして、 log 2 + log 5 = 1

 これらを連立して 4 元 1 次方程式と思って解くと、小数第6位四捨五入で、

log 2 ≒ 72/239 ≒ 0.30126 (真値 0.30103)
log 3 ≒ 114/239 ≒ 0.47699 (真値 0.47712)
log 5 ≒ 167/239 ≒ 0.69874 (真値 0.69897)
log 7 ≒ 202/239 ≒ 0.84519 (真値 0.84510)

こうして比較的簡単によい近似値が得られるようです。

 これを見て疑問がいくつか...。

(1) 分母 239 というのはどのくらいの優秀さなんでしょうか?即ち、4 つの対数を分母が共
通な有理数で近似する場合、分母<1000 くらいで何番目くらいに優秀な近似値を得られる
分母なんでしょうか?
(絶対誤差の和で評価するか相対誤差の和で評価するかでも変わると思いますが)

(2) 4 桁で差が 1 であるものよりも、7桁以上で差が 11 や 13 あるいはそれらを含む 2 桁く
らいの合成数であるものを用いた方が精度がよくなりそうな気がします……本当でしょうか?
本当だとして、具体的にどのくらい精度を上げられるでしょう?
(差も 1 桁の素因数しか持たないものは、ABC予想の証明を信じるなら 44100 より先には
存在しないはず)

(3) ≒ ではなく、不等号での評価は同様の方法で可能でしょうか?

(4) 使う素数に 11 を含めて 5 元 1 次にする、使う素数に 13 まで含めて 6 元 1 次にする、
などで精度の向上は可能でしょうか?

特に、 (1) (2) (4) は手作業では無謀にもほどがあるので、コンピュータ系の援軍をお願いします。


(コメント) 「4 元 1 次方程式と思って解く」というのは、新しい発想ですね!


 らすかるさんからのコメントです。(令和6年9月15日付け)

 とりあえず(1)だけ:分母 239 というのはどのくらいの優秀さなんでしょうか?

 分母<1000では(相対誤差の合計で)70番目に優秀でした。

 239で相対誤差の合計は0.001457…です。

 1位は568で、相対誤差の合計は0.0001758…です。

 2位以下は、897、960、807、794、… と続きますが、分母が大きければ相対誤差が小さい

のは当然で、そういう意味では69番目までに分母が239未満のものはありませんので、239は

結構優秀と言えると思います。

 分母の大きさも考慮して、「相対誤差の合計×分母」でランキングを作ると、

1位の568、2位の897は変わりませんが、3位が329、そして4位が239となります。

 相対誤差の合計×分母の具体値(5位まで)は、

568 0.099882607730
897 0.222871229356
329 0.285662258393
239 0.348293385746
103 0.383956736568

のようになっていて、これを見ても 568 だけ突出している感じです。ちなみに、分母が568の

場合の対数の近似値は、

log2 ≒ 171/568 ≒ 0.30106
log3 ≒ 271/568 ≒ 0.47711
log5 ≒ 397/568 ≒ 0.69894
log7 ≒ 480/568 ≒ 0.84507

なので、かなり良い近似になっていますね。

 分母が568になるような組合せを適当に探してみると、

 (2400,2401) 、(4374,4375) 、(250000,250047)

から式を立てれば上記の値になるようです。(検算していません。)


 DD++ さんからのコメントです。(令和6年9月15日付け)

 おおー、568 優秀ですね。しかし、250047 は人力じゃ流石にちょっと出てこない……。

 やっぱり桁数が多いと 2 数の差が少しあっても気にならなくなっていくので精度上がるっ
ぽいですね。


 らすかるさんからのコメントです。(令和6年9月16日付け)

 (3)について、

5log2 + log7 ≒ 2log3 + 2log5
5log2 + log3 + 2log5 ≒ 4log7
log2 + 7log3 ≒ 4log5 + log7



5log2 + log7 + a = 2log3 + 2log5
5log2 + log3 + 2log5 + b = 4log7
log2 + 7log3 + c = 4log5 + log7
(a、b、c>0)

として計算すると、

log2 = (72 - 27a - 5b - 7c) / 239
log3 = (114 + 17a + 12b - 31c) / 239
log5 = (167 + 27a + 5b + 7c) / 239
log7 = (202 - 16a + 59b - 13c) / 239

となります。この式から、

 log2 < 72/239 、log5 > 167/239

はただちにわかりますが、log3 と 114/239 の大小関係は、17a + 12b - 31c の符号を調べ

ないとわかりません。しかし、17a + 12b - 31c の符号を調べるために計算すると、

 17a + 12b - 31c = 239log3 - 114log10

となって、3^239 と 10^114 の大小関係を調べることになり、本末転倒です。

よって、同様の方法で不等式で上下からおさえるためには、近似式を多数用意してたまたま

大小関係がわかることに期待するぐらいしか思いつきませんが、追加の近似式を用意しよう

とすると桁数が増えて、手計算に不向きになってきますので、とりあえず

 「この方法での不等号での評価は難しい」

と言ってよいかと思います。


 DD++ さんからのコメントです。(令和6年9月16日付け)

 17a + 12b - 31c の符号を調べないとわかりません。

 なるほど、差分を定数化してしまえばよかったのですね。連立方程式を解く手間はけっこう
増えてしまいますけれども。手でやるなら逆行列用意して解くのが一番早いかな?

 {1/n - 1/(2*n^2)} log e < log{1+(1/n)} < {1/n} log e

を使えば、log e は括り出して放置でいいので、a, b, c の線型結合の正負評価はなんとかな
るケースが多そうに思います。

 (224, 225)、(2400, 2401)、(4374, 4375) のケースは実際それでなんとかなるみたいです。


 らすかるさんからのコメントです。(令和6年9月16日付け)

 (2)について、

 素数 2、3、5、7 、10桁以下で(2400,2401)より誤差率が小さいものは、以下の6個しかあり
ませんでした。左端は誤差率(大きい方の値÷小さい方の値−1)です。

0.000040616 78121827 78125000
0.000066758 645657712 645700815
0.000107377 3954653486 3955078125
0.000188000 250000 250047
0.000228624 4374 4375
0.000295397 184473632 184528125
0.000416667 2400 2401

78121827 = 3^13 * 7^2, 78125000 = 2^3 * 5^10, 差 = 3173 = 19 * 167
645657712 = 2^4 * 7^9, 645700815 = 3^17 * 5, 差 = 43103 (素数)
3954653486 = 2 * 7^11, 3955078125 = 3^4 * 5^11, 差 = 424639 (素数)

 これを使って、

13log3 + 2log7 = 3log2 + 10log5 (78121827, 78125000)
4log2 + 9log7 = 17log3 + log5 (645657712, 645700815)
log2 + 11log7 = 4log3 + 11log5 (3954653486, 3955078125)
log2 + log5 = 1

を解くと、一次従属で解けませんでした。あらためて、

78121827 = 3^13 * 7^2, 78125000 = 2^3 * 5^10, 差 = 3173 = 19 * 167
645657712 = 2^4 * 7^9, 645700815 = 3^17 * 5, 差 = 43103 (素数)
250000 = 2^4 * 5^6, 250047 = 3^6 * 7^3, 差 = 47 (素数)

 これを使って、

13log3 + 2log7 = 3log2 + 10log5 (78121827, 78125000)
4log2 + 9log7 = 17log3 + log5 (645657712, 645700815)
4log2 + 6log5 = 6log3 + 3log7 (250000, 250047)
log2 + log5 = 1

を解くと、 log2 = 171/568 、log3 = 271/568 、log5 = 397/568 、log7 = 480/568

・・・これは見覚えがありますね。

 しかし、この値は、(2400,2401)、(4374,4375)、(250000,250047)からも得られるのではない
かと思って、上で「検算していません」と書いたのをあらためて検算してみると、なんと

5log2 + log3 + 2log5 = 4log7 (2400, 2401)
log2 + 7log3 = 4log5 + log7 (4374, 4375)
4log2 + 6log5 = 6log3 + 3log7 (250000, 250047)
log2 + log5 = 1

は一次従属で解けませんでした。結構解けない場合が出てくるのですね。

 それでは、いろいろ組合せを変えて試すことにします。

13log3 + 2log7 = 3log2 + 10log5 (78121827, 78125000)
log2 + 11log7 = 4log3 + 11log5 (3954653486, 3955078125)
4log2 + 6log5 = 6log3 + 3log7 (250000, 250047)
log2 + log5 = 1

→ log2 = 171/568 、log3 = 271/568 、log5 = 397/568 、log7 = 480/568

4log2 + 9log7 = 17log3 + log5 (645657712, 645700815)
log2 + 11log7 = 4log3 + 11log5 (3954653486, 3955078125)
4log2 + 6log5 = 6log3 + 3log7 (250000, 250047)
log2 + log5 = 1

→ log2 = 171/568 、log3 = 271/568 、log5 = 397/568 、log7 = 480/568

13log3 + 2log7 = 3log2 + 10log5 (78121827, 78125000)
4log2 + 9log7 = 17log3 + log5 (645657712, 645700815)
log2 + 7log3 = 4log5 + log7 (4374, 4375)
log2 + log5 = 1

→ log2 = 171/568 、log3 = 271/568 、log5 = 397/568 、log7 = 480/568

13log3 + 2log7 = 3log2 + 10log5 (78121827, 78125000)
log2 + 11log7 = 4log3 + 11log5 (3954653486, 3955078125)
log2 + 7log3 = 4log5 + log7 (4374, 4375)
log2 + log5 = 1

→ log2 = 171/568 、log3 = 271/568 、log5 = 397/568 、log7 = 480/568

13log3 + 2log7 = 3log2 + 10log5 (78121827, 78125000)
4log2 + 6log5 = 6log3 + 3log7 (250000, 250047)
log2 + 7log3 = 4log5 + log7 (4374, 4375)
log2 + log5 = 1

→ 一次従属

4log2 + 9log7 = 17log3 + log5 (645657712, 645700815)
4log2 + 6log5 = 6log3 + 3log7 (250000, 250047)
log2 + 7log3 = 4log5 + log7 (4374, 4375)
log2 + log5 = 1

→ log2 = 171/568 、log3 = 271/568 、log5 = 397/568 、log7 = 480/568

13log3 + 2log7 = 3log2 + 10log5 (78121827, 78125000)
log2 + 7log3 = 4log5 + log7 (4374, 4375)
5log2 + log3 + 2log5 = 4log7 (2400, 2401)
log2 + log5 = 1

→ 一次従属

 解が得られても同じものばかりでした。ちょっと精度が良いぐらいだと、あまり変わらないよ
うです。

 では、さらに精度が良いものを見つけて試します。

 しかし、「10桁以下」を11桁以下、12桁以下、・・・と増やしてもなかなか見つかりません。
「15桁以下」まで増やして、やっと

0.000026141 205885750000000 205891132094649
0.000033563 281474976710656 281484423828125

の二つが見つかりましたので、これと(78121827, 78125000)で試します。

205885750000000 = 2^7 * 5^9 * 7^7, 205891132094649 = 3^30,
差 = 5382094649 = 3673 * 1465313

281474976710656 = 2^48, 281484423828125 = 5^11 * 7^8,
差 = 9447117469 (素数)

7log2 + 9log5 + 7log7 = 30log3 (205885750000000, 205891132094649)
48log2 = 11log5 + 8log7 (281474976710656, 281484423828125)
13log3 + 2log7 = 3log2 + 10log5 (78121827, 78125000)
log2 + log5 = 1

log2 = 3125/10381 = 0.30103073 (真値 0.30103000)
log3 = 4953/10381 = 0.47712166 (真値 0.47712125)
log5 = 7256/10381 = 0.69896927 (真値 0.69897000)
log7 = 8773/10381 = 0.84510163 (真値 0.84509804)

ようやく少し精度が上がりました。

 ちなみにもう一桁上の

0.000007053 2251783932057135 2251799813685248
2251783932057135 = 3^13 * 5 * 7^10, 2251799813685248 = 2^51,
差 = 15881628113 = 13 * 71 * 17206531

を使って、

13log3 + log5 + 10log7 = 51log2 (2251783932057135, 2251799813685248)
7log2 + 9log5 + 7log7 = 30log3 (205885750000000, 205891132094649)
48log2 = 11log5 + 8log7 (281474976710656, 281484423828125)
log2 + log5 = 1

としても、上と同じ分母10381の値になりました。

 というわけで、使う数字の桁数をかなり増やしても結果の精度もあまり上がらないらしい
ということがわかりました。


 DD++ さんからのコメントです。(令和6年9月16日付け)

 使う桁数が上がっても、2、3、5、7 で作れる合成数の割合が減ることで打ち消されてしまい、
誤差率がなかなか小さくならないんですね。そうなると、11や13の使用を検討する方が精度
上げには重要なのかな?


 らすかるさんからのコメントです。(令和6年9月16日付け)

 これで当初の課題はとりあえず完結。

 (4)について、

【11を追加した場合】

(1万まで)
0.000102041 9800 9801
0.000228624 4374 4375
0.000330688 3024 3025
0.000416667 2400 2401
0.001244444 5625 5632

9800 = 2^3 * 5^2 * 7^2, 9801 = 3^4 * 11^2
4374 = 2 * 3^7, 4375 = 5^4 * 7
3024 = 2^4 * 3^3 * 7, 3025 = 5^2 * 11^2
2400 = 2^5 * 3 * 5^2, 2401 = 7^4

3log2 + 2log5 + 2log7 = 4log3 + 2log11 (9800, 9801)
log2 + 7log3 = 4log5 + log7 (4374, 4375)
4log2 + 3log3 + log7 = 2log5 + 2log11 (3024, 3025)
5log2 + log3 + 2log5 = 4log7 (2400, 2401)
log2 + log5 = 1

→ 一次従属

5625 = 3^2 * 5^4, 5632 = 2^9 * 11, 差 = 7
3log2 + 2log5 + 2log7 = 4log3 + 2log11 (9800, 9801)
log2 + 7log3 = 4log5 + log7 (4374, 4375)
5log2 + log3 + 2log5 = 4log7 (2400, 2401)
2log3 + 4log5 = 9log2 + log11 (5625, 5632)
log2 + log5 = 1

log2 = 270/897 = 0.301003 (真値 0.301030)
log3 = 428/897 = 0.477146 (真値 0.477121)
log5 = 627/897 = 0.698997 (真値 0.698970)
log7 = 758/897 = 0.845039 (真値 0.845098)
log11 = 934/897 = 1.041249 (真値 1.041393)

897は上の方で568に次いで精度の良い分母です。

(1億まで)
0.000016089 3294172 3294225
0.000022158 67108864 67110351
0.000040616 78121827 78125000
0.000050668 14348180 14348907

3294172 = 2^2 * 7^7, 3294225 = 3^2 * 5^2 * 11^4, 差 = 53 (素数)
67108864 = 2^26, 67110351 = 3 * 7^5 * 11^3, 差 = 1487 (素数)
78121827 = 3^13 * 7^2, 78125000 = 2^3 * 5^10, 差 = 3173 = 19 * 167
14348180 = 2^2 * 5 * 7^2 * 11^4, 14348907 = 3^15, 差 = 727 (素数)

2log2 + 7log7 = 2log3 + 2log5 + 4log11 (3294172, 3294225)
26log2 = log3 + 5log7 + 3log11 (67108864, 67110351)
13log3 + 2log7 = 3log2 + 10log5 (78121827, 78125000)
2log2 + log5 + 2log7 + 4log11 = 15log3 (14348180, 14348907)
log2 + log5 = 1

log2 = 6421/21330 = 0.3010314 (真値 0.3010300)
log3 = 10177/21330 = 0.4771214 (真値 0.4771213)
log5 = 14909/21330 = 0.6989686 (真値 0.6989700)
log7 = 18026/21330 = 0.8451008 (真値 0.8450980)
log11 = 22213/21330 = 1,0413971 (真値 1.0413927)

 結構精度が上がりました。

【13も追加した場合】

(1万まで)
0.000102041 9800 9801
0.000150263 6655 6656
0.000228624 4374 4375
0.000236742 4224 4225
0.000244200 4095 4096
0.000330688 3024 3025
0.000416667 2400 2401

9800 = 2^3 * 5^2 * 7^2, 9801 = 3^4 * 11^2
6655 = 5 * 11^3, 6656 = 2^9 * 13
4374 = 2 * 3^7, 4375 = 5^4 * 7
4224 = 2^7 * 3 * 11, 4225 = 5^2 * 13^2
4095 = 3^2 * 5 * 7 * 13, 4096 = 2^12
3024 = 2^4 * 3^3 * 7, 3025 = 5^2 * 11^2
2400 = 2^5 * 3 * 5^2, 2401 = 7^4

3log2 + 2log5 + 2log7 = 4log3 + 2log11 (9800, 9801)
log5 + 3log11 = 9log2 + log13 (6655, 6656)
log2 + 7log3 = 4log5 + log7 (4374, 4375)
7log2 + log3 + log11 = 2log5 + 2log13 (4224, 4225)
2log3 + log5 + log7 + log13 = 12log2 (4095, 4096)
log2 + log5 = 1

→ 一次従属

3log2 + 2log5 + 2log7 = 4log3 + 2log11 (9800, 9801)
log5 + 3log11 = 9log2 + log13 (6655, 6656)
log2 + 7log3 = 4log5 + log7 (4374, 4375)
7log2 + log3 + log11 = 2log5 + 2log13 (4224, 4225)
2log3 + log5 + log7 + log13 = 12log2 (4095, 4096)
4log2 + 3log3 + log7 = 2log5 + 2log11 (3024, 3025)
log2 + log5 = 1

→ 一次従属 (式が一つ多くてもなお一次従属なので他の式が必要)

3log2 + 2log5 + 2log7 = 4log3 + 2log11 (9800, 9801)
log5 + 3log11 = 9log2 + log13 (6655, 6656)
log2 + 7log3 = 4log5 + log7 (4374, 4375)
7log2 + log3 + log11 = 2log5 + 2log13 (4224, 4225)
5log2 + log3 + 2log5 = 4log7 (2400, 2401)
log2 + log5 = 1

log2 = 270/897 = 0.301003 (真値 0.301030)
log3 = 428/897 = 0.477146 (真値 0.477121)
log5 = 627/897 = 0.698997 (真値 0.698970)
log7 = 758/897 = 0.845039 (真値 0.845098)
log11 = 934/897 = 1.041249 (真値 1.041393)
log13 = 999/897 = 1.113712 (真値 1.113943)

11だけ追加したときと同じ精度です。

(1億まで)
0.000007456 5767125 5767168
0.000008117 123200 123201
0.000013783 72772425 72773428
0.000015573 1990625 1990656
0.000016089 3294172 3294225
0.000018861 19140264 19140625
0.000022158 67108864 67110351

5767125 = 3 * 5^3 * 7 * 13^3, 5767168 = 2^19 * 11, 差 = 43 (素数)
123200 = 2^6 * 5^2 * 7 * 11, 123201 = 3^6 * 13^2
72772425 = 3^7 * 5^2 * 11^3, 72773428 = 2^2 * 7^2 * 13^5, 差 = 1003 = 17 * 59
1990625 = 5^5 * 7^2 * 13, 1990656 = 2^13 * 3^5, 差 = 31 (素数)
3294172 = 2^2 * 7^7, 3294225 = 3^2 * 5^2 * 11^4, 差 = 53 (素数)
19140264 = 2^3 * 3^2 * 11^2 * 13^3, 19140625 = 5^8 * 7^2, 差 = 361 = 19^2
67108864 = 2^26, 67110351 = 3 * 7^5 * 11^3, 差 = 1487 (素数)

log3 + 3log5 + log7 + 3log13 = 19log2 + log11 (5767125, 5767168)
6log2 + 2log5 + log7 + log11 = 6log3 + 2log13 (123200, 123201)
7log3 + 2log5 + 3log11 = 2log2 + 2log7 + 5log13 (72772425, 72773428)
5log5 + 2log7 + log13 = 13log2 + 5log3 (1990625, 1990656)
2log2 + 7log7 = 2log3 + 2log5 + 4log11 (3294172, 3294225)
log2 + log5 = 1

→ 一次従属

log3 + 3log5 + log7 + 3log13 = 19log2 + log11 (5767125, 5767168)
6log2 + 2log5 + log7 + log11 = 6log3 + 2log13 (123200, 123201)
7log3 + 2log5 + 3log11 = 2log2 + 2log7 + 5log13 (72772425, 72773428)
2log2 + 7log7 = 2log3 + 2log5 + 4log11 (3294172, 3294225)
3log2 + 2log3 + 2log11 + 3log13 = 8log5 + 2log7 (19140264, 19140625)
log2 + log5 = 1

log2 = 6079/20194 = 0.3010300089 (真値 0.3010299957)
log3 = 9635/20194 = 0.4771219174 (真値 0.4771212547)
log5 = 14115/20194 = 0.6989699911 (真値 0.6989700043)
log7 = 17066/20194 = 0.8451025057 (真値 0.8450980400)
log11 = 21030/20194 = 1.0413984352 (真値 1.0413926852)
log13 = 22495/20194 = 1.1139447361 (真値 1.1139433523)

 精度は11だけ追加のときと同程度です。
(log2とlog5は精度がいいですが、他はそこまで良くありません)

【29まで追加した場合(素数10個)】

(1億まで)
0.000000010 96059600 96059601
0.000000055 18085704 18085705
0.000000075 26578123 26578125
0.000000084 11859210 11859211
0.000000095 10556000 10556001
0.000000121 8268799 8268800
0.000000155 12901779 12901781
0.000000169 5909760 5909761
0.000000194 5142500 5142501
0.000000244 4096575 4096576
0.000000244 4090624 4090625
0.000000250 4004000 4004001
0.000000315 22194425 22194432
0.000000365 13697019 13697024
0.000000365 90312467 90312500
0.000000371 2697695 2697696
0.000000485 8254125 8254129
0.000000489 88012332 88012375
0.000000494 2023424 2023425
0.000000520 90312453 90312500
0.000000540 1852200 1852201
0.000000560 67874587 67874625
0.000000569 75557027 75557070
0.000000587 46000759 46000786

96059600 = 2^4 * 5^2 * 7^2 * 13^2 * 29, 96059601 = 3^8 * 11^4
18085704 = 2^3 * 3 * 7^3 * 13^3, 18085705 = 5 * 11 * 17 * 23 * 29^2
26578123 = 11 * 13^2 * 17 * 29^2, 26578125 = 3^5 * 5^6 * 7
11859210 = 2 * 3^4 * 5 * 11^4, 11859211 = 7 * 13 * 19^4
10556000 = 2^5 * 5^3 * 7 * 13 * 29, 10556001 = 3^4 * 19^4
8268799 = 7^2 * 11 * 23^2 * 29, 8268800 = 2^10 * 5^2 * 17 * 19
12901779 = 3^2 * 11 * 19^4, 12901781 = 23^2 * 29^3
5909760 = 2^8 * 3^5 * 5 * 19, 5909761 = 11^2 * 13^2 * 17^2
5142500 = 2^2 * 5^4 * 11^2 * 17, 5142501 = 3^3 * 7^2 * 13^2 * 23
4096575 = 3^4 * 5^2 * 7 * 17^2, 4096576 = 2^6 * 11^2 * 23^2
4090624 = 2^8 * 19 * 29^2, 4090625 = 5^5 * 7 * 11 * 17
4004000 = 2^5 * 5^3 * 7 * 11 * 13, 4004001 = 3^2 * 23^2 * 29^2
22194425 = 5^2 * 11^3 * 23 * 29, 22194432 = 2^8 * 3^3 * 13^2 * 19
13697019 = 3^4 * 7^3 * 17 * 29, 13697024 = 2^16 * 11 * 19
90312467 = 7 * 23^2 * 29^3, 90312500 = 2^2 * 5^7 * 17^2
2697695 = 5 * 7^3 * 11^2 * 13, 2697696 = 2^5 * 3^2 * 17 * 19 * 29
8254125 = 3^2 * 5^3 * 11 * 23 * 29, 8254129 = 13^4 * 17^2
88012332 = 2^2 * 3^4 * 17 * 19 * 29^2, 88012375 = 5^3 * 11^3 * 23^2
2023424 = 2^13 * 13 * 19, 2023425 = 3^2 * 5^2 * 17 * 23^2
90312453 = 3^2 * 7 * 11 * 19^4, 90312500 = 2^2 * 5^7 * 17^2
1852200 = 2^3 * 3^3 * 5^2 * 7^3, 1852201 = 13 * 17^3 * 29
67874587 = 11^2 * 23 * 29^3, 67874625 = 3^3 * 5^3 * 7 * 13^2 * 17
75557027 = 7 * 13^3 * 17^3, 75557070 = 2 * 3^3 * 5 * 23^4
46000759 = 7^6 * 17 * 23, 46000786 = 2 * 13^3 * 19^2 * 29

4log2 + 2log5 + 2log7 + 2log13 + log29 = 8log3 + 4log11 (96059600, 96059601)
3log2 + log3 + 3log7 + 3log13 = log5 + log11 + log17 + log23 + 2log29 (18085704, 18085705)
log11 + 2log13 + log17 + 2log29 = 5log3 + 6log5 + log7 (26578123, 26578125)
log2 + 4log3 + log5 + 4log11 = log7 + log13 + 4log19 (11859210, 11859211)
2log7 + log11 + 2log23 + log29 = 10log2 + 2log5 + log17 + log19 (8268799, 8268800)
2log3 + log11 + 4log19 = 2log23 + 3log29 (12901779, 12901781)
8log2 + 5log3 + log5 + log19 = 2log11 + 2log13 + 2log17 (5909760, 5909761)
4log3 + 2log5 + log7 + 2log17 = 6log2 + 2log11 + 2log23 (4096575, 4096576)
6log7 + log17 + log23 = log2 + 3log13 + 2log19 + log29 (46000759, 46000786)
log2 + log5 = 1

log2 = 360565/1197771 = 0.3010299966 (真値 0.3010299957)
log3 = 571482/1197771 = 0.4771212527 (真値 0.4771212547)
log5 = 837206/1197771 = 0.6989700034 (真値 0.6989700043)
log7 = 1012234/1197771 = 0.8450981031 (真値 0.8450980400)
log11 = 1247350/1197771 = 1.0413927203 (真値 1.0413926852)
log13 = 1334249/1197771 = 1.1139433164 (真値 1.1139433523)
log17 = 1473796/1197771 = 1.2304488922 (真値 1.2304489214)
log19 = 1531654/1197771 = 1.2787536182 (真値 1.2787536010)
log23 = 1631038/1197771 = 1.3617277426 (真値 1.3617278360)
log29 = 1751618/1197771 = 1.4623980711 (真値 1.4623979979)

 分母の1197771は10000000までで最も誤差が少なくなる値です。

# 誤差の少ない順に、9個+(log2+log5=1)だと一次従属になります。そこから1個ずつ追加して
いってもしばらく一次従属のままで、24個目の(46000759,46000786)の式を追加してようやく一
次独立になります。そしてそこから逆順に消せる行を消していって10行に減らしたのが、上に
書いた式です。

 結論として、素数を 2、3、5、7 に限定してしまうと、巨大な数にしてもあまり精度が向上しま
せんが、素数の個数を増やしていけば、現実的な値(といっても手計算は無理)で精度を上
げられることがわかりました。


 DD++ さんからのコメントです。(令和6年9月17日付け)

 非常に深く調査してくださり、ありがとうございました。だんだんと方程式が一次従属になって
しまう問題が強敵になっていくのは思いもよりませんでした。手計算でやる大変さと得られるも
ののバランス的には、最初のやつが思った以上に優秀だったんですねえ……。


 GAI さんからのコメントです。(令和6年9月18日付け)

 らすかるさんのお仕事で、これだけの素数に対する常用対数値が共通分母で

log2 = 360565/1197771 = 0.3010299966 (真値 0.3010299957)
log3 = 571482/1197771 = 0.4771212527 (真値 0.4771212547)
log5 = 837206/1197771 = 0.6989700034 (真値 0.6989700043)
log7 = 1012234/1197771 = 0.8450981031 (真値 0.8450980400)
log11 = 1247350/1197771 = 1.0413927203 (真値 1.0413926852)
log13 = 1334249/1197771 = 1.1139433164 (真値 1.1139433523)
log17 = 1473796/1197771 = 1.2304488922 (真値 1.2304489214)
log19 = 1531654/1197771 = 1.2787536182 (真値 1.2787536010)
log23 = 1631038/1197771 = 1.3617277426 (真値 1.3617278360)
log29 = 1751618/1197771 = 1.4623980711 (真値 1.4623979979)
(分母の1197771は、10000000までで最も誤差が少なくなる値)

の様に構成可能であることに驚きましたが、ふと分母を揃えなくとも分母はものによって変化
させてもよいならどうなるのか気になって調べてみました。

 3桁ほどの分数での近似は、分母を揃えることに拘らないなら

gp > abs(146/485-log(2)/log(10))
%469 = 9.3217107035117801368259509460209827810 E-7

gp > abs(73/153-log(3)/log(10))
%470 = 2.9282868735104173903973984794620415878 E-6

gp > abs(339/485-log(5)/log(10))
%471 = 9.3217107035117801368259509460209517576 E-7

gp > abs(431/510-log(7)/log(10))
%472 = 7.9857055620241233702400874249978544429 E-10

gp > abs(478/459-log(11)/log(10))
%473 = 1.6503537575300559002466218995055742675 E-6

gp > abs(743/667-log(13)/log(10))
%474 = 3.2382107964776722479812223847580763836 E-7

gp > abs(299/243-log(17)/log(10))
%475 = 3.7535188454130236161139021156448952272 E-6

gp > abs(656/513-log(19)/log(10))
%476 = 1.1643056554722575810391097558286690920 E-6

gp > abs(1103/810-log(23)/log(10))
%477 = 5.5904413551619395128281053884536869710 E-7

gp > abs(525/359-log(29)/log(10))
%478 = 2.4547234686221517882671475279717504814 E-6

の様な分数でかなりの精度を上げれそうです。


 らすかるさんからのコメントです。(令和6年9月18日付け)

 近似分数に関しては以前少し研究したことがあります。
(分数の昇順で精度順に分数を列挙する方法を考えました(何十桁でもOK)。)

 書かれている分数は、すべて連分数を打ち切って得られる分数ですね。しかし、それは
「3桁以下で最も良い」分数が得られるとは限りません。

 例えば、log17は、299/243より881/716の方が良い近似になります。

 同様に、log29も、525/359より914/625の方が少しだけ良い近似になります。

 log23は、3桁以下で連分数打ち切りで得られる分数では64/47が最大で、精度が出ないた
めに、分子4桁を許容したものと思いますが、975/716でもそこそこの精度は出ます。

 大半の値は、小数点以下の精度が(分母の桁数×2)桁程度になりますが、たまたま連分数
打ち切り直後の値が大きい場合は精度が良くなりますね。

 log7は、[0;1,5,2,5,6,1,4813,1,1,…]で4813の前で打ち切っているため、これだけ特別に精度
が良くなっています。

 円周率の355/113も同様ですね。


 DD++ さんからのコメントです。(令和6年9月18日付け)

 単に 1 つの対数値を機械計算を許して自由に有理数近似するだけでしたら、

 数学感動秘話 > 累乗の上 4 桁

他、このサイトの何ヶ所かで同じ議論が繰り返し行われていますね。


 kuiperbelt さんからのコメントです。(令和6年9月22日付け)

 29までの素数で、常用対数の連分数展開を求めてみましたが、log_{10}(7)のときの4813の
ような大きな数は現れませんでした。なお、log_{10}(5)=1-log_{10}(2)なので省略しています。

log_{10}(2)=[0;3,3,9,2,2,4,6,2,1,1,3,1,18,...]
[0;3,3,9,2,2,4,6,2,1,1,3,1]=97879/325147=0.301029995663499893894146339963

log_{10}(3)=[0,2,10,2,2,1,13,1,7,18,...]
[0,2,10,2,2,1,13,1,7]=34367/33001=0.477121254550546065527863343601

log_{10}(11)=[1;24,6,3,2,1,1,3,1,1,1,9,...]
[1;24,6,3,2,1,1,3,1,1,1]=22014/21139=1.04139268507014938941244204721

log_{10}(13)=[1;1,8,1,3,2,7,1,6,16,...]
[1;1,8,1,3,2,7,1,6]=5113/4590=1.11394335511982570806100217865

log_{10}(17)=[1,4,2,1,17,1,13,1,1,3,3,26,...]
[1;4,2,1,17,1,13,1,1,3,3]=99797/81106=1.23045150790323773826843883313

log_{10}(19)=[1;3,1,1,2,2,1,3,2,2,1,4,1,1,1,6,1,3,1,3,1,47,...]
[1;3,1,1,2,2,1,3,2,2,1,4,1,1,1,6,1,3,1,3,1]=6497723/5081294=1.27875360095282815755199364571

log_{10}(23)=[1;2,1,3,4,17,2,1,2,66,...]
[1;2,1,3,4,17,2,1,2]=9016/6621=1.36172783567436943059960731007

log_{10}(29)=[[1;2,6,6,1,2,1,2,2,2,1,1,1,1,1,5,1,2,3,37,...]
[1;2,6,6,1,2,1,2,2,2,1,1,1,1,1,5,1,2,3]=5243915/3585833=1.46239799789895402267757589380


 らすかるさんからのコメントです。(令和6年9月22日付け)

 log[10]7で連分数の8番目の値が4813ですが、

log[10]2は、137番目が5393
log[10]3は、562番目が2788
log[10]11は、2179番目が3864
log[10]13は、133番目が1378
log[10]17は、710番目が3301
log[10]19は、1341番目が2249
log[10]23は、921番目が2695
log[10]29は、352番目が1901

のようにずっと先まで見れば大きな数はいずれ出てきます。log[10]7は奇跡的に前の方に
あったということですね。



  以下、工事中!