浮動小数点数の丸めルーチン

提供: Appmethod Topics
移動先: 案内検索

浮動小数点ルーチンの使用 への移動

Object Pascal ランタイム ライブラリ(RTL)に含まれている丸めルーチンの多くは、32 ビットの場合は FPU(浮動小数点演算ユニット)レジスタに、64 ビットの場合は SSE レジスタに現在設定されている丸めモードを使用します。RTL ルーチンの中には、独自の丸めモードまたは丸めアルゴリズムを持っているものがあります。このトピックの表では、さまざまな丸めルーチンの詳細を示します。

丸めルーチン

以下の表では、RTL に用意されている丸め関数についてまとめます。

名前 引数の型 戻り値の型 桁パラメータの有無 桁パラメータの範囲 丸めモード 備考

System.Round
(組み込み)

Extended

Int64

RoundMode の現在の設定

System.Trunc
(組み込み)

Extended

Int64

常に rmTruncate(ゼロ方向に切り捨て)

Int と同じ。戻り値は整数型。

System.Int
(組み込み)

  • 32 ビットの場合は Extended
  • 64 ビットの場合は Double
  • 32 ビットの場合は Extended
  • 64 ビットの場合は Double
常に rmTruncate(ゼロ方向に切り捨て) Trunc と同じ。戻り値は浮動小数点型。

System.Math.RoundTo

Extended

Extended あり -20 .. +20

デフォルト値なし

常に rmNearest(銀行型丸め)

System.Math.SimpleRoundTo

Single
Double
Extended

Single
Double
Extended

あり

-37 .. +37

デフォルト値は -2

常に "Round half away from zero"(絶対値で四捨五入) SimpleRoundTo は、従来学校で習ってきた丸め手法です。

System.Math.Ceil

Single
Double
Extended

Integer

常に rmUp(次の最小の整数)
System.Math.Floor Single
Double
Extended
Integer 常に rmDown(前の最大の整数)
Data.FmtBcd.BCDRoundTo TBcd TBcd あり Integer 現在の RoundMode

FMTBcd.BCDRoundAt
(非推奨)

String String あり SmallInt 常に "Round half away from zero"(絶対値で四捨五入)  非推奨の関数です。  代わりに BcdRoundTo を使用します。

正数の場合の例

以下の表は、正の数を丸めた場合の例を示します。

名前 丸めモード 0.4 0.5 0.6 1.4 1.5 1.6

System.Round(x)

rmNearest 0 0 1 1 2 2
rmDown 0 0 0 1 1 1
rmUp 1 1 1 2 2 2
rmTruncate 0 0 0 1 1 1

System.Trunc(x)

0 0 0 1 1 1

System.Int(X)

0.0 0.0 0.0 1.0 1.0 1.0

Math.RoundTo(x, 0)

0.0 0.0 1.0 1.0 2.0 2.0

Math.SimpleRoundTo(x,0)

0.0 1.0 1.0 1.0 2.0 2.0

Math.Ceil(x)

1 1 1 2 2 2

Math.Floor(x)

0 0 0 1 1 1

FMTBcd.BCDRoundTo(x,0)

rmNearest

0 0 1 1 2 2

rmDown

0 0 0 1 1 1

rmUp

1 1 1 2 2 2

rmTruncate

0 0 0 1 1 1

FmtBcd.RoundAt(x,0)
(非推奨)

'0' '1' '1' '1' '2' '2'

負数の場合の例

以下の表は、負の数を丸めた場合の例を示します。

名前 丸めモード -0.4 -0.5 -0.6 -1.4 -1.5 -1.6

System.Round(x)

rmNearest 0 0 -1 -1 -2 -2
rmDown -1 -1 -1 -2 -2 -2
rmUp 0 0 0 -1 -1 -1
rmTruncate 0 0 0 -1 -1 -1
System.Trunc(x) 0 0 0 -1 -1 -1
System.Int(X) 0.0 0.0 0.0 -1.0 -1.0 -1.0
Math.RoundTo(x,0) 0.0 0.0 -1.0 -1.0 -2.0 -2.0
Math.SimpleRoundTo(x,0) 0.0 -1.0 -1.0 -1.0 -2.0 -2.0
Math.Ceil(x) 0 0 0 -1 -1 -1
Math.Floor(x) -1 -1 -1 -2 -2 -2

FMTBcd.BCDRoundTo(x,0)

rmNearest 0 0 -1 -1 -2 -2
rmDown -1 -1 -1 -2 -2 -2
rmUp 0 0 0 -1 -1 -1
rmTruncate 0 0 0 -1 -1 -1
FmtBcd.RoundAt(x,0)

(非推奨)

'-0' '-1' '-1' '-1' '-2' '-2'

RoundTo と SimpleRoundTo で桁パラメータを指定した場合の例

桁(D)は、引数に渡した値を丸める位(10 の累乗)を示します。桁の取り得る値の範囲は –20 から 20 までです。以下の例では、D = 0、-1、... -5 を使用しています。


名前 0 -1 -2 -3 -4 -5
Math.RoundTo(2.15625, D) 2.0 2.2 2.16 2.156 2.1562 2.15625
Math.SimpleRoundTo(2.15625, D) 2.0 2.2 2.16 2.156 2.1563 2.15625

関連項目

コード例