2019年3月7日木曜日

Juliaの数学的定数と精度

ネイピア数の計算からの続き)

円周率やネイピア数の計算で,JuliaのBigFloatの精度が$10^{-77}$であったが,これは,
$2^{-255}$に対応していた。すなわち,BigFloatの精度は次のようになる。
\begin{equation}
{\rm eps(BigFloat)}=2^{-255}=1.7272337110188889250772703725600\\
79914223200072887256277004740694033718360632485\ {\rm e}^{-77}
\end{equation}
円周率πやネイピア数eの有効桁数がこれによって決まるが,BigFloatの精度は制御することができる。このためには,setprecision(BigFloat,n) とすればよい。デフォルト値はn=256に対応しており,m = log10(BigInt(2)^(-n+1))  から,10進法における有効桁数mが求まることになる。

その様子は次のプログラムでわかる。Juliaの数学的定数として,円周率πやネイピア数に加えて,カタラン数,オイラーのガンマγ,黄金比φなどが Base.MathConstants に準備されている。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
function cnst(n)
  setprecision(BigFloat,2^n)
  println(" ")
  println("- - - - - - - - - - - - - - - - - - - - - - - - - - - -")
  println(2^n," eps=",eps(BigFloat))
  println("- - - - - - - - - - - - - - - - - - - - - - - - - - - -")
  println(" π=",BigFloat(Base.MathConstants.π))
  println("  =",BigFloat(Base.MathConstants.ℯ))
  println("  c=",BigFloat(Base.MathConstants.catalan))
  println(" γ=",BigFloat(Base.MathConstants.γ))
  println(" φ=",BigFloat(Base.MathConstants.φ))
end

for k in 4:2:10
 @time cnst(k)
end
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - -
16 eps=3.05176e-05
- - - - - - - - - -
 π=3.1416
  ℯ=2.71826
  c=0.91597
 γ=0.577209
 φ=1.61804
  0.000738 seconds (475 allocations: 36.148 KiB)

- - - - - - - - - -
64 eps=1.08420217248550443401e-19
- - - - - - - - - -
 π=3.14159265358979323851
  ℯ=2.71828182845904523543
  c=0.915965594177219015048
 γ=0.577215664901532860616
 φ=1.61803398874989484821
  0.000528 seconds (471 allocations: 37.184 KiB)

- - - - - - - - - -
256 eps=1.727233711018888925077270372560079914223200072887256277004740694033718360632485e-77
- - - - - - - - - -

π=3.141592653589793238462643383279502884197169399375105820974944592307816406286198

ℯ=2.718281828459045235360287471352662497757247093699959574966967627724076630353555

c=0.9159655941772190150546035149323841107741493742816721342664981196217630197762584

γ=0.5772156649015328606065120900824024310421593359399235988057672348848677267776685

φ=1.61803398874989484820458683436563811772030917980576286213544862270526046281891
  0.000546 seconds (471 allocations: 40.613 KiB)

- - - - - - - - - -
1024 eps=1.112536929253600691545116358666202032109607990231165915276663708443602217406959097927141579506255510282033669865517905502576217080776730054428006192688859410565388996766001165239805073721291818035960782523471251867104187625403325308329079474360245589984295819824250317954385059152437399890443876874974725790226e-308
- - - - - - - - - -

π=3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644622948954930381964428810975665933446128475648233786783165271201909145648566923460348610454326648213393607260249141273724586997

ℯ=2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921817413596629043572900334295260595630738132328627943490763233829880753195251019011573834187930702154089149934884167509244761460668082264800168477411853742345442437107539077744992069551702766

c=0.9159655941772190150546035149323841107741493742816721342664981196217630197762547694793565129261151062485744226191961995790358988033258590594315947374811584069953320287733194605190387274781640878659090247064841521630002287276409423882599577415088163974702524820115607076448838078733704899008647751132259971343386

γ=0.5772156649015328606065120900824024310421593359399235988057672348848677267776646709369470632917467495146314472498070824809605040144865428362241739976449235362535003337429373377376739427925952582470949160087352039481656708532331517766115286211995015079847937450857057400299213547861466940296043254215190587755369

φ=1.618033988749894848204586834365638117720309179805762862135448622705260462818902449707207204189391137484754088075386891752126633862223536931793180060766726354433389086595939582905638322661319928290267880675208766892501711696207032221043216269548626296313614438149758701220340805887954454749246185695364864449242
  0.000710 seconds (481 allocations: 56.924 KiB)

0 件のコメント: