パラメータ
- P - 精度。有効範囲: [ 1 : 76 ]。数値が持てる10進の桁数 (小数部を含む) を決定します。デフォルトの精度は 10 です。
- S - スケール。有効範囲: [ 0 : P ]。小数部が持てる10進の桁数を決定します。
- P が [ 1 : 9 ] の場合 - Decimal32(S)
- P が [ 10 : 18 ] の場合 - Decimal64(S)
- P が [ 19 : 38 ] の場合 - Decimal128(S)
- P が [ 39 : 76 ] の場合 - Decimal256(S)
Decimal の値の範囲
- Decimal(P, S) - (-1 * 10^(P - S), 1 * 10^(P - S))
- Decimal32(S) - (-1 * 10^(9 - S), 1 * 10^(9 - S))
- Decimal64(S) - (-1 * 10^(18 - S), 1 * 10^(18 - S))
- Decimal128(S) - (-1 * 10^(38 - S), 1 * 10^(38 - S))
- Decimal256(S) - (-1 * 10^(76 - S), 1 * 10^(76 - S))
内部表現
演算と結果型
Decimal64(S1) <op> Decimal32(S2) -> Decimal64(S)Decimal128(S1) <op> Decimal32(S2) -> Decimal128(S)Decimal128(S1) <op> Decimal64(S2) -> Decimal128(S)Decimal256(S1) <op> Decimal<32|64|128>(S2) -> Decimal256(S)
- 加算、減算: S = max(S1, S2)。
- 乗算: S = S1 + S2。
- 除算: S = S1。
オーバーフローチェック
decimal_check_overflow 設定を使ってチェックを無効にするのが適切です。チェックを無効にした状態でオーバーフローが発生すると、結果は不正確になります: