Compet CS-2122L

101001010.10.01N

丸めの種類

編集

凡例

編集

1#0.1


切り捨て・切り上げ

編集

0010

4

00 (rounding toward zero; RZ) (rounding toward infinity; RI)

 (rounding toward minus infinity; RM) (rounding toward plus infinity; RP)

11使

使
  • 安全基準は、常に安全な方に丸められる。
  • 誤差不確かさは、切り上げられる。
  • 数値が実際より増えると誇張・虚偽・捏造・難解と見なされる恐れがあるときは、切り捨てられる。
  • 数値が実際より減ると矮小化・虚偽・捏造と見なされる恐れがあるときは、切り上げられる。

(広義の)最近接丸め

編集

2 (round to the nearest)

0.5[0, 1)0.50.5


四捨五入

編集

0.50.5JIS Z 8401B[1]45R

0.50210.50.51.51JIS Z 84011.520.5[1]

0.5

五捨五超入

編集

端数が0.5以下なら切り捨て、0.5超なら切り上げる丸めを「五捨五超入」という。

0.5は常に切り上げられる四捨五入とは逆の特徴を持つ。端数がランダムでない場合は、わずかに負のバイアスが発生しうる。

正の数に対しては、0.5を引いて切り上げることで得られる。

偶数への丸め(round to even)

編集

round to even[2][3]0.50.50.5(+0.5+0.5JIS Z 8401AB[1]

0.5+0.5+0.5

JIS Z 8401 JIS[4]ISO 31-0ISO使 (bankers' rounding)[1]50.5[2]

奇数への丸め(round to odd)

編集

「奇数への丸め」(round to odd)[2]は、偶数への丸めの対称である。端数が0.5より小さいなら「切り捨て」、端数が0.5より大きいならは「切り上げ」という点は最近接丸めとして同様だが、端数がちょうど0.5なら「切り捨て」と「切り上げ」のうち結果が奇数となる方へ丸める、という点が偶数への丸めの逆である。

端数0.5のデータが有限割合で存在する場合、「四捨五入」ではバイアスが発生するが、「奇数への丸め」ではバイアスが無い。つまり、多数足し合わせても、丸め誤差が特定の側に偏って累積することがない。ただし、偶数+0.5は現れるが奇数+0.5は現れないデータのように分布に特殊な特徴がある場合は、バイアスが発生することがある。

実用上は最近接丸めとなる丸め

編集

定義は最近接丸めになっていないが、最近接丸めと等しくなる場合にのみ実用される丸めがいくつかある。

五捨六入

編集

56[3]

0.40.550使

0.10.10.50.60.90.50.6

0.11001000

使0

四捨六入

編集

アルシーアル麻雀得点計算では、かつて端数処理が行われる前の段階の計算による得点を丸めるときに「四捨六入」と呼ばれるものが採用されていた。これは丸める桁が必ず偶数になるためであり、実質的には「最近接丸め」である。また、#偶数への丸めが「四捨六入」と呼ばれる事例もある。

スウェディッシュ・ラウンディング

編集

5を単位とした端数が3未満なら切り捨て、3以上なら切り上げとなる。

端数がランダムな場合は、「五捨六入」と同様に非実用的である。しかし通常は、1刻みのデータに対し5を丸め幅として丸めるので、その結果は最近接値への丸めである。

IEEE丸め

編集

IEEE 754で丸めモードとして定められている

  • 最近接丸め(偶数)
  • 0への丸め
  • 正の無限大への丸め
  • 負の無限大への丸め

の4つを「IEEE丸め」と総称する。

特殊な丸め

編集

乱数丸め

編集

[0,1)



10

00.5

使

フォン・ノイマン丸め

編集

常に奇数側へ丸める。

二進法では、切り捨てた後LSBをセットするという、簡単なアルゴリズムで得られる。

この方法の丸め誤差は切り捨て・切り上げと同程度で大きいが、ランダムなデータに対してはバイアスを持たない。

2回以上の丸めの禁止

編集

2

122.51  123  122.5  122 

123.49  123  123.5  124 

 + 0.50.50.5 + 0.5[4]

与えられた数値を上で挙げた端数処理によって置き換えた場合の結果を示す。この例では、丸め幅は0.1である[注 5]

与えられた数値 切り捨て 切り上げ 四捨五入 五捨六入 偶数への丸め
8.05 8.0 8.1 8.1 8.0 8.0
8.051 8.0 8.1 8.1 8.0 8.1
8.15 8.1 8.2 8.2 8.1 8.2
8.25 8.2 8.3 8.3 8.2 8.2
8.263 8.2 8.3 8.3 8.3 8.3
8.347 8.3 8.4 8.3 8.3 8.3
8.35 8.3 8.4 8.4 8.3 8.4
8.45 8.4 8.5 8.5 8.4 8.4

太字の数値は、四捨五入の場合と異なる結果となるものである。

コンピュータでの丸め

編集

低レベルの丸め

編集

choppingは、あるビット以下を全て0にする。これは最も計算が簡単な丸めで、正の数に対しては切捨てとなる。負数に対する動作は負数の方式によるが、2の補数表現では負の無限大への丸めとなる。

choppingは、下位ビットを明示的に0にするほか、たとえば32ビットレジスタの上位16ビットを16ビットレジスタとして使うなどでも得られる。

choppingのあと、有効桁の中でのLSBをセットすると、フォン・ノイマン丸めとなる。

プログラミング言語の丸め関数

編集

FPU

12

RubyPHP 0.1  0.11 1 0.1  0.1 [5]

32

floor, ceiling, truncate

編集
 
floor関数(緑)とceil関数(赤)

0使

 - floor

 - ceilceiling

 - trunctruncatefix

5IEEE3

: ±3.7 1
  • ceil(3.7) = 4, ceil(-3.7) = -3
  • floor(3.7) = 3, floor(-3.7) = -4
  • trunc(3.7) = 3, trunc(-3.7) = -3

最近接丸めは、多くの環境にroundという関数がある。しかし、どの最近接丸めかを定めている一般的となっている標準(デファクトスタンダード)は存在しないので注意が必要である。たいていは四捨五入か偶数への丸めであるが[注 6]、明示的に選択できないことも多い。

プログラミング言語 round(0.5) round(-0.5)
C99
C++11

Ruby

1 -1
.NET Framework
Python
0 0
Java 1 0
JavaScript 1 -0

C言語における型変換と端数処理

編集
 
演算子(int)



Cmodf0

§a.b JIS X 3010-1993C89

C§6.2.1.30

C89§7.5floorceil§7.5.6

C99roundfegetround/fesetroundmath.hfenv.h

 (int)(0.6/0.2)  3.0  2.0  0.6  0.2 0.6/0.2  2.9999999999999996 

テーブルメーカーのジレンマ (数表作成者のジレンマ)

編集

[7]#2[6]



 y^w 21/2ulp1ulp y^w 1/2ulp?...()

IEEE75419851985bit1ULP2008

GelfondSchneiderLindemannWeierstrass



GNU MPFR



IBMlibultim ()

Sun Microsystemslibmcr (4)

Arénaire(LIP, ENS Lyon)CRlibm (4)

determined 42

10^n n420

n10

建設事業における積算の例

編集

[7]

1()2[8][9]51[?][10]32 P2823032

[9]  

m3mm m 3cm

3

1便

mm42215226. (6).2)3()

mm2m3t21100

[11]調

[12]44×23×11

脚注

編集

注釈

編集


(一)^ JISISO

(二)^ 

(三)^ 

(四)^ ...000  0  lexer XXX...XXX.5000000000000000000000001 

(五)^ JIS Z8401:2019, p.2, 2 e) 

(六)^ []MicrosoftC99C++11JavaECMAScript(JavaScript)

(七)^ 

出典

編集


(一)^ abcJISZ8401 2019.

(二)^ ab"The Art of Computer Programming" D. E. Knuth (1997, § 4.2.2)The Art of Computer Programming Volume 2 Seminumerical algorithms Third Edition Donald E.Knuth2004ISBN 978-4-7561-4543-7 p.224 §4.2.2 (20041026 )

(三)^ C (UNIX & Information Science)    5 p.12 §1.5

(四)^    1989/4/26 1 6 p.208

(五)^ 210. Island Life. 20161223

(六)^ Jean-Michel Muller. Introduction to the Table Maker's Dilemma. 2019310

(七)^ 
.  (26221). 2019920[] 

.  (H23.10.1). 2019920


(八)^ (). . 2019920

(九)^ ab. . 2019920

(十)^ 
3010 . . 20211202019920

. . 2019920

. . 2019920[]


(11)^ . . 2019919

(12)^  (30-03-20). . . 20191016

参考文献

編集

規格

編集

関連項目

編集