Napier’s Logarithms: 九九のない世界

Napier’s Logarithms: 九九のない世界#

Napierは、\(N\)に対して対数 (logarithm) \(L\)を次の数式で定義し、\(R=7\) の場合の数表を作成した。

\[ \frac{N}{10^R} = \left(1-\frac{1}{10^{R}}\right)^{L} \]

その後、Eulerは自然対数\(e\)を次の極限式で定義した。

\[ \lim_{n\rightarrow\infty} \left( 1+\frac{1}{n} \right)^n = e \]
\[ \lim_{n\rightarrow\infty} \left( 1-\frac{1}{n} \right)^n = \frac{1}{e} \]

\(R\)が十分大きいとき次の近似式が得られる。

\[ \left( 1-\frac{1}{10^R} \right)^{10^R} = (1-10^{-R})^{10^R} \approx \frac{1}{e} \]
import math
(1-10**-5)**(10**5), (1-10**-7)**(10**7), 1/math.e
(0.3678776017682465, 0.367879422971105, 0.36787944117144233)

現代数学の\(\log\)を用いるとNapierの対数\(L\)は次のように近似できる。

\[ L = \log_{1-10^{-R}} \frac{N}{10^R} \approx 10^R \log_{1/e}\left( \frac{N}{10^R} \right) \approx -10^R \log_{e}\left( \frac{N}{10^R} \right) \]

Napierの定義#

1-10**-5, 1-10**-7
(0.99999, 0.9999999)

\(p_{n}\) を次の数列として定義したとき、

\[\begin{split} \begin{eqnarray} p_{0} &=& 10^7 = 10000000 \\ p_{1} &=& 10^7 \left(1-\frac{1}{10^7} \right)= 10000000 \times 0.9999999 = 9999999 \\ p_{n+1} &=& p_{n} \left(1-\frac{1}{10^7}\right) = p_{n} \times 0.9999999 \end{eqnarray} \end{split}\]

数列の添字 \(n\)\(p_{n}\) のNapier対数である。

\[ p_{n} = 10^7 \times \left(1-\frac{1}{10^7}\right)^n \]
\[ n = \log_{1-10^{-7}}\left(\frac{p_{n}}{10^7}\right) \]

次のように対数法則を満たす。

\[ p_{m+n} = 10^R \times \left(1-\frac{1}{10^7}\right)^{m+n} = 10^R \times \left(1-\frac{1}{10^7}\right)^m \times \left(1-\frac{1}{10^7}\right)^n = p_{m} \times p_{n} \times \frac{1}{10^R} \]

\(R=5\)のとき#

import math

def napier5(n):
    """
    R=5のときのNapierの数表の第n項を計算する
    """
    return 10**5 * (1-1/(10**5))**n
# `math.log()`を使って、Napierの対数を計算する
list(map(lambda x: math.log(x/10**5, 1-1/(10**5)), (1234, 5678)))
[439488.72859419696, 286855.6785070823]
# Napierの数表の項番を計算する
list(map(napier5, _))
[1234.0, 5677.999999999997]
# 対数法則から積を求める
napier5(sum(__))*10**5
7006651.999999997
# 検算
1234*5678
7006652

出版された表を再現する#

Napierは、\(R=7\)の場合の数表を作成した。

!pip install -U astropy
Collecting astropy
  Using cached astropy-6.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (10 kB)
Requirement already satisfied: numpy>=1.23 in /opt/conda/lib/python3.11/site-packages (from astropy) (1.26.4)
Collecting pyerfa>=2.0.1.1 (from astropy)
  Using cached pyerfa-2.0.1.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (5.7 kB)
Collecting astropy-iers-data>=0.2024.5.27.0.30.8 (from astropy)
  Downloading astropy_iers_data-0.2024.6.24.0.31.11-py3-none-any.whl.metadata (5.1 kB)
Requirement already satisfied: PyYAML>=3.13 in /opt/conda/lib/python3.11/site-packages (from astropy) (6.0.1)
Requirement already satisfied: packaging>=19.0 in /opt/conda/lib/python3.11/site-packages (from astropy) (24.0)
Using cached astropy-6.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (10.2 MB)
Downloading astropy_iers_data-0.2024.6.24.0.31.11-py3-none-any.whl (1.9 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.9/1.9 MB 36.8 MB/s eta 0:00:0000:01
?25hUsing cached pyerfa-2.0.1.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (738 kB)
Installing collected packages: pyerfa, astropy-iers-data, astropy
Successfully installed astropy-6.1.1 astropy-iers-data-0.2024.6.24.0.31.11 pyerfa-2.0.1.4
from astropy.coordinates import Angle
from astropy import units
Angle('{:d}°{:d}{:d}″'.format(1,2,3)).radian
0.018049613347708025
import math
import numpy as np
#from scoping import scoping
import pandas as pd
def napier(dms_d=0, r=7):
    for dms_m in range(60):
        a = Angle('{:d}°{:d}{:d}″'.format(dms_d,dms_m,0))
        yield (a,
               "{:8.0f}".format(math.sin(a.radian)*10**r),
               "{:8.0f}".format(math.log(math.sin(a.radian), 1-1/(10**r)) if a.radian else float('inf')),
               "{:8.0f}".format(math.log(math.tan(a.radian), 1-1/(10**r)) if a.radian else float('inf')),
               "{:8.0f}".format(math.log(math.cos(a.radian), 1-1/(10**r))),
               "{:8.0f}".format(math.cos(a.radian)*10**r),
               Angle('{:d}°{:d}{:d}″'.format(90,0,0))-Angle('{:d}°{:d}{:d}″'.format(dms_d,dms_m,0)))

Note

角度が\(0\degree\)から\(1\degree\)の正弦、余弦とそれらの対数、および正接の対数の値。角度は一分刻み

pd.DataFrame(napier(dms_d=0), columns=['d','sin','log(sin(d))','log(tan(d))','log(cos(d))', 'cos(d)', '90-d'])
d sin log(sin(d)) log(tan(d)) log(cos(d)) cos(d) 90-d
0 0d00m00s 0 inf inf -0 10000000 90d00m00s
1 0d01m00s 2909 81425711 81425711 0 10000000 89d59m00s
2 0d02m00s 5818 74494240 74494239 2 9999998 89d58m00s
3 0d03m00s 8727 70439590 70439586 4 9999996 89d57m00s
4 0d04m00s 11636 67562771 67562764 7 9999993 89d56m00s
5 0d05m00s 14544 65331336 65331326 11 9999989 89d55m00s
6 0d06m00s 17453 63508123 63508107 15 9999985 89d54m00s
7 0d07m00s 20362 61966618 61966597 21 9999979 89d53m00s
8 0d08m00s 23271 60631306 60631279 27 9999973 89d52m00s
9 0d09m00s 26180 59453478 59453444 34 9999966 89d51m00s
10 0d10m00s 29089 58399876 58399833 42 9999958 89d50m00s
11 0d11m00s 31998 57446777 57446726 51 9999949 89d49m00s
12 0d12m00s 34907 56576666 56576605 61 9999939 89d48m00s
13 0d13m00s 37815 55776243 55776171 72 9999928 89d47m00s
14 0d14m00s 40724 55035167 55035084 83 9999917 89d46m00s
15 0d15m00s 43633 54345242 54345147 95 9999905 89d45m00s
16 0d16m00s 46542 53699861 53699753 108 9999892 89d44m00s
17 0d17m00s 49451 53093620 53093498 122 9999878 89d43m00s
18 0d18m00s 52360 52522041 52521904 137 9999863 89d42m00s
19 0d19m00s 55268 51981374 51981221 153 9999847 89d41m00s
20 0d20m00s 58177 51468446 51468277 169 9999831 89d40m00s
21 0d21m00s 61086 50980551 50980364 187 9999813 89d39m00s
22 0d22m00s 63995 50515356 50515152 205 9999795 89d38m00s
23 0d23m00s 66904 50070845 50070621 224 9999776 89d37m00s
24 0d24m00s 69813 49645256 49645012 244 9999756 89d36m00s
25 0d25m00s 72721 49237043 49236778 264 9999736 89d35m00s
26 0d26m00s 75630 48844843 48844557 286 9999714 89d34m00s
27 0d27m00s 78539 48467447 48467139 308 9999692 89d33m00s
28 0d28m00s 81448 48103778 48103447 332 9999668 89d32m00s
29 0d29m00s 84357 47752873 47752517 356 9999644 89d31m00s
30 0d30m00s 87265 47413866 47413485 381 9999619 89d30m00s
31 0d31m00s 90174 47085976 47085570 407 9999593 89d29m00s
32 0d32m00s 93083 46768498 46768065 433 9999567 89d28m00s
33 0d33m00s 95992 46460791 46460330 461 9999539 89d27m00s
34 0d34m00s 98900 46162271 46161782 489 9999511 89d26m00s
35 0d35m00s 101809 45872405 45871887 518 9999482 89d25m00s
36 0d36m00s 104718 45590706 45590158 548 9999452 89d24m00s
37 0d37m00s 107627 45316727 45316148 579 9999421 89d23m00s
38 0d38m00s 110535 45050055 45049444 611 9999389 89d22m00s
39 0d39m00s 113444 44790311 44789668 644 9999357 89d21m00s
40 0d40m00s 116353 44537144 44536467 677 9999323 89d20m00s
41 0d41m00s 119261 44290229 44289518 711 9999289 89d19m00s
42 0d42m00s 122170 44049266 44048519 746 9999254 89d18m00s
43 0d43m00s 125079 43813973 43813190 782 9999218 89d17m00s
44 0d44m00s 127987 43584090 43583271 819 9999181 89d16m00s
45 0d45m00s 130896 43359374 43358517 857 9999143 89d15m00s
46 0d46m00s 133805 43139598 43138702 895 9999105 89d14m00s
47 0d47m00s 136713 42924549 42923614 935 9999065 89d13m00s
48 0d48m00s 139622 42714028 42713053 975 9999025 89d12m00s
49 0d49m00s 142530 42507849 42506833 1016 9998984 89d11m00s
50 0d50m00s 145439 42305836 42304778 1058 9998942 89d10m00s
51 0d51m00s 148348 42107824 42106723 1100 9998900 89d09m00s
52 0d52m00s 151256 41913657 41912513 1144 9998856 89d08m00s
53 0d53m00s 154165 41723190 41722002 1188 9998812 89d07m00s
54 0d54m00s 157073 41536284 41535050 1234 9998766 89d06m00s
55 0d55m00s 159982 41352808 41351528 1280 9998720 89d05m00s
56 0d56m00s 162890 41172639 41171312 1327 9998673 89d04m00s
57 0d57m00s 165799 40995659 40994284 1375 9998625 89d03m00s
58 0d58m00s 168707 40821758 40820334 1423 9998577 89d02m00s
59 0d59m00s 171616 40650830 40649357 1473 9998527 89d01m00s

Note

角度が\(89\degree\)から\(90\degree\)の正弦、余弦とそれらの対数、および正接の対数の値。角度は一分刻み

pd.DataFrame(napier(dms_d=89), columns=['d','sin','log(sin(d))','log(tan(d))','log(cos(d))', 'cos(d)', '90-d'])
d sin log(sin(d)) log(tan(d)) log(cos(d)) cos(d) 90-d
0 89d00m00s 9998477 1523 -40481252 40482775 174524 1d00m00s
1 89d01m00s 9998527 1473 -40649357 40650830 171616 0d59m00s
2 89d02m00s 9998577 1423 -40820334 40821758 168707 0d58m00s
3 89d03m00s 9998625 1375 -40994284 40995659 165799 0d57m00s
4 89d04m00s 9998673 1327 -41171312 41172639 162890 0d56m00s
5 89d05m00s 9998720 1280 -41351528 41352808 159982 0d55m00s
6 89d06m00s 9998766 1234 -41535050 41536284 157073 0d54m00s
7 89d07m00s 9998812 1188 -41722002 41723190 154165 0d53m00s
8 89d08m00s 9998856 1144 -41912513 41913657 151256 0d52m00s
9 89d09m00s 9998900 1100 -42106723 42107824 148348 0d51m00s
10 89d10m00s 9998942 1058 -42304778 42305836 145439 0d50m00s
11 89d11m00s 9998984 1016 -42506833 42507849 142530 0d49m00s
12 89d12m00s 9999025 975 -42713053 42714028 139622 0d48m00s
13 89d13m00s 9999065 935 -42923614 42924549 136713 0d47m00s
14 89d14m00s 9999105 895 -43138702 43139598 133805 0d46m00s
15 89d15m00s 9999143 857 -43358517 43359374 130896 0d45m00s
16 89d16m00s 9999181 819 -43583271 43584090 127987 0d44m00s
17 89d17m00s 9999218 782 -43813190 43813973 125079 0d43m00s
18 89d18m00s 9999254 746 -44048519 44049266 122170 0d42m00s
19 89d19m00s 9999289 711 -44289518 44290229 119261 0d41m00s
20 89d20m00s 9999323 677 -44536467 44537144 116353 0d40m00s
21 89d21m00s 9999357 644 -44789668 44790311 113444 0d39m00s
22 89d22m00s 9999389 611 -45049444 45050055 110535 0d38m00s
23 89d23m00s 9999421 579 -45316148 45316727 107627 0d37m00s
24 89d24m00s 9999452 548 -45590158 45590706 104718 0d36m00s
25 89d25m00s 9999482 518 -45871887 45872405 101809 0d35m00s
26 89d26m00s 9999511 489 -46161782 46162271 98900 0d34m00s
27 89d27m00s 9999539 461 -46460330 46460791 95992 0d33m00s
28 89d28m00s 9999567 433 -46768065 46768498 93083 0d32m00s
29 89d29m00s 9999593 407 -47085570 47085976 90174 0d31m00s
30 89d30m00s 9999619 381 -47413485 47413866 87265 0d30m00s
31 89d31m00s 9999644 356 -47752517 47752873 84357 0d29m00s
32 89d32m00s 9999668 332 -48103447 48103778 81448 0d28m00s
33 89d33m00s 9999692 308 -48467139 48467447 78539 0d27m00s
34 89d34m00s 9999714 286 -48844557 48844843 75630 0d26m00s
35 89d35m00s 9999736 264 -49236778 49237043 72721 0d25m00s
36 89d36m00s 9999756 244 -49645012 49645256 69813 0d24m00s
37 89d37m00s 9999776 224 -50070621 50070845 66904 0d23m00s
38 89d38m00s 9999795 205 -50515152 50515356 63995 0d22m00s
39 89d39m00s 9999813 187 -50980364 50980551 61086 0d21m00s
40 89d40m00s 9999831 169 -51468277 51468446 58177 0d20m00s
41 89d41m00s 9999847 153 -51981221 51981374 55268 0d19m00s
42 89d42m00s 9999863 137 -52521904 52522041 52360 0d18m00s
43 89d43m00s 9999878 122 -53093498 53093620 49451 0d17m00s
44 89d44m00s 9999892 108 -53699753 53699861 46542 0d16m00s
45 89d45m00s 9999905 95 -54345147 54345242 43633 0d15m00s
46 89d46m00s 9999917 83 -55035084 55035167 40724 0d14m00s
47 89d47m00s 9999928 72 -55776171 55776243 37815 0d13m00s
48 89d48m00s 9999939 61 -56576605 56576666 34907 0d12m00s
49 89d49m00s 9999949 51 -57446726 57446777 31998 0d11m00s
50 89d50m00s 9999958 42 -58399833 58399876 29089 0d10m00s
51 89d51m00s 9999966 34 -59453444 59453478 26180 0d09m00s
52 89d52m00s 9999973 27 -60631279 60631306 23271 0d08m00s
53 89d53m00s 9999979 21 -61966597 61966618 20362 0d07m00s
54 89d54m00s 9999985 15 -63508107 63508123 17453 0d06m00s
55 89d55m00s 9999989 11 -65331326 65331336 14544 0d05m00s
56 89d56m00s 9999993 7 -67562764 67562771 11636 0d04m00s
57 89d57m00s 9999996 4 -70439586 70439590 8727 0d03m00s
58 89d58m00s 9999998 2 -74494239 74494240 5818 0d02m00s
59 89d59m00s 10000000 0 -81425711 81425711 2909 0d01m00s