一部のプログラミング言語(またはそれらのコンパイラ)では、 0.3 や -1.17 などの循環しない小数を丸めずに表し、それらの演算を行うための組み込み(プリミティブ)またはライブラリの10 進データ型が提供されています。例としては、 Pythonのor型や、他の言語で提供される類似の型があります。
decimal.Decimalnum7.Num
根拠
ほとんどのプログラミング言語では、小数は浮動小数点数または固定小数点数としてサポートされています。ただし、このような表現では通常、分母が 2 の累乗に制限されます。ほとんどの小数 (または一般的な分数) は、分母が 2 の累乗である分数として正確に表現することはできません。たとえば、単純な小数 0.3 ( 3 ⁄ 10 ) は、 5404319552844595 ⁄ 18014398509481984 (0.29999999999999988897769…)と表現される場合があります。この不正確さにより、経験豊富なプログラマーには馴染みのある多くの問題が発生します。たとえば、小数の表現が不正確であるため、一部のシステムでは式が直感に反して false と評価される場合があります。
0.1 * 7 == 0.7
すべての小数は分数であるため、有理数データ型を使用して正確に表現できますが、多くの場合、循環しない小数(分母が 10 の累乗である分数)のみを考慮する方が便利な場合があります。たとえば、世界中の通貨の分数単位は、ほとんどが分母が 10 の累乗に基づいています。また、科学における分数の測定のほとんどは、他の分母体系の分数ではなく、小数として報告されます。
10 進データ型は、浮動小数点数または固定小数点数として実装できます。固定小数点の場合、分母は 10 の固定累乗に設定されます。浮動小数点の場合、可変指数は、数値の仮数部に掛けられる 10 の累乗を表します。
有理数データ型をサポートする言語では、通常、基数 2 の浮動小数点数ではなく 2 つの整数からそのような値を構築できます。基数 2 の浮動小数点数では正確さが失われるためです。通常、基本的な算術演算 ( +、-、×、÷、整数の累乗) と比較 ( =、<、>、≤、≥、≠ ) は、ネイティブに、または言語によって提供される演算子オーバーロード機能を通じて、それらに対して機能するように拡張されます。これらの操作は、コンパイラによって整数マシン命令のシーケンスまたはライブラリ呼び出しに変換される場合があります。サポートは、書式設定、整数または浮動小数点値への丸めなど、他の操作にも拡張される場合があります。この例は、123.456 [明確化が必要]です。
標準フォーマット
IEEE 754 では、精度の異なる 3 つの標準浮動小数点 10 進データ型が規定されています。
言語サポート
- C#には128ビットの10進数データ型が組み込まれており、有効桁数は28~29桁です。範囲はおおよそ±1.0 × 10 −28~ ±7.9228 × 10 28です。[1]
- Python 2.4以降、Pythonの標準ライブラリには、モジュールdecimalにDecimalクラスが含まれています。[2]
- Rubyの標準ライブラリには、モジュールbigdecimalにBigDecimalクラスが含まれています。
- Javaの標準ライブラリには java.math.BigDecimal クラスが含まれています。
- Objective-Cでは、CocoaおよびGNUstep APIによって、仮数が最大 38 桁、指数が -128 から 127 までの小数を表す NSDecimalNumber クラスと NSDecimal C データ型が提供されます。
- 一部のIBMシステムとSQLシステムは、少なくとも2つの大きな形式を備えたDECFLOAT形式をサポートしています。[3]
- ABAPの新しいDECFLOATデータ型には、decimal64(DECFLOAT16として)とdecimal128(DECFLOAT34として)の形式が含まれています。[4]
- PL/I は、固定小数点データと浮動小数点データの両方をネイティブにサポートします。
- GNUコンパイラコレクション(gcc)は、CおよびC++の拡張として10進浮動小数点数のサポートを提供します。[5]
参照
参考文献
- ^ 「浮動小数点数値型 - C# リファレンス」。2022 年 9 月 29 日。
- ^ 「Decimal — 10 進固定小数点および浮動小数点演算 — Python 3.10.0 ドキュメント」。
- ^ 「データ管理」IBM。
- ^ 「新しい ABAP データ型 DECFLOAT は複雑な計算にどのように役立つか? « SAP Ignite」。2012 年 8 月 9 日にオリジナルからアーカイブ。2012年 7 月 28 日に取得。
- ^ 「GCC マニュアル」。6.13 10 進浮動小数点型。
