Commit f5929bc
Math.expm1 / Math.log1p を追加 (Ruby 4.0)
Ruby 4.0 で Math.expm1 と Math.log1p が追加された (Feature #21527)。
x が 0 に近いときの桁落ちを避けて exp(x) - 1 / log(x + 1) を計算する
メソッドで、C の expm1(3) / log1p(3) に対応する。
実機で登場バージョンを確認した結果、3.1 から 3.4 には存在せず 4.0 で
追加されたため #@SInCE 4.0 で分岐した。既存の並びに合わせて expm1 は
Math.exp の直後、log1p は Math.log10 の直後に配置した。
なお Ruby 本体の rdoc は expm1(-INFINITY) の結果を 0.0 と記載しているが、
実機で確認したところ正しくは -1.0 だったため、-1.0 として記述している。
例の出力はすべて実機 (4.0.6) で確認済み。桁落ちを避けられることが分かる
例 (Math.exp(1e-16) - 1 が 0.0 になるのに対し Math.expm1(1e-16) は
1.0e-16 を返す) も添えた。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>1 parent 0f53391 commit f5929bc
1 file changed
Lines changed: 69 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
341 | 341 | | |
342 | 342 | | |
343 | 343 | | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
344 | 379 | | |
345 | 380 | | |
346 | 381 | | |
| |||
458 | 493 | | |
459 | 494 | | |
460 | 495 | | |
| 496 | + | |
| 497 | + | |
| 498 | + | |
| 499 | + | |
| 500 | + | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
| 518 | + | |
| 519 | + | |
| 520 | + | |
| 521 | + | |
| 522 | + | |
| 523 | + | |
| 524 | + | |
| 525 | + | |
| 526 | + | |
| 527 | + | |
| 528 | + | |
| 529 | + | |
461 | 530 | | |
462 | 531 | | |
463 | 532 | | |
| |||
0 commit comments