モジュール java.base
パッケージ java.lang

クラスMath

java.lang.Object
java.lang.Math

public final class Math extends Object
Mathクラスは、指数関数、対数関数、平方根、および三角関数といった基本的な数値処理を実行するためのメソッドを含んでいます。

クラスStrictMathの数値メソッドの一部とは異なり、クラスMathの同等の機能のすべての実装がビット・フォー・ビット同じ結果を返すように定義されていません。 このゆるやかさによって、厳密な再現性が要求されない実装においてパフォーマンスの向上が可能になります。

デフォルトでは、Mathの多くのメソッドは単に、StrictMath内の対応するメソッドを実装として呼び出します。 コード・ジェネレータは、プラットフォーム固有のネイティブ・ライブラリまたはマイクロプロセッサの命令がある場合は積極的に使用し、高性能なMathメソッドの実装を提供します。 そのような高性能な実装でもMathの仕様に準拠する必要があります。

実装仕様の品質は、2つのプロパティ、返される結果の正確さ、およびメソッドの単調性と関係があります。 浮動小数点のMathメソッドの精度は、ulps」「最後の場所の単位」で測定されます。 浮動小数点形式が指定された場合、特定の実数値のulpはその数値を囲んでいる2つの浮動小数点値の距離になります。 メソッドの正確性を、特定の引数に対してではなく全体として論じる場合に示されるulp数は、すべての引数における最大誤差になります。 メソッドが返すエラーが常に0.5 ulp未満の場合、そのメソッドは実際の結果にもっとも近い浮動小数点数を常に返します。この種のメソッドは正しく丸められています。 「正しく丸められる」メソッドは、通常、浮動小数点近似が可能な最適なメソッドですが、多くの浮動小数点メソッドを正しく丸めることは現実的ではありません。 その代わりにMathクラスの場合、1または2 ulpより大きいエラーが特定のメソッドで許可されます。 非公式には1 ulpのエラーでは、正確な結果が表現可能な数値の場合に正確な結果が返されます。そうでない場合、正確な結果を囲む2つの浮動小数点値のいずれかが返される可能性があります。 正確な結果の絶対値が大きい場合、カッコの一方の端点が無限である可能性があります。 個別の引数の正確さに加え、メソッドの異なる引数間の適切な関係も重要です。 したがって、0.5を超えるulpエラーがあるほとんどのメソッドは、semi-monotonicである必要があります: 数学関数が非減少の場合、浮動小数点近似も同様に、数学関数が非増加の場合、浮動小数点近似も同様です。 1 ulpの正確性を保持する近似値すべてが、自動的に単調要件を満たすわけではありません。

このプラットフォームでは、intおよびlongプリミティブ型を持つ符号付き2の補数整数演算が使用されます。 開発者は、算術演算が一貫して正しい結果を生成するようにプリミティブ型を選択する必要があります。これは、場合によっては、それらの演算が計算の値の範囲をオーバーフローしないことを意味しています。 ベスト・プラクティスは、プリミティブ型と、オーバーフローを回避するアルゴリズムを選択することです。 サイズがintまたはlongで、オーバーフロー・エラーを検出する必要がある場合、結果がオーバーフローすると、名前がExactで終わるメソッドは ArithmeticExceptionをスローします。

IEEE 754推奨される操作

IEEE 754浮動小数点標準の2019リビジョンには、推奨される操作のセクションと、プログラミング環境に含まれる場合はその操作のセマンティクスが含まれています。 このクラスに存在する推奨操作には、sincostanasinacosatanexpexpm1loglog10log1psinhcoshtanhhypotおよびpowが含まれます。 (sqrt操作は、標準の異なるセクションからのIEEE 754の必須部分です。) 推奨される操作の特殊なケースの動作は通常、IEEE 754規格のガイダンスに従います。 ただし、powメソッドは、「仕様」に記載されているように、一部の引数に対して異なる動作を定義します。 IEEE 754標準は、正しく丸められる操作を定義します。これは、このクラスにも含まれている問題のあるほとんどのメソッドに必要なよりも厳格な実装条件です。
導入されたバージョン:
1.0
関連項目: