Home丸め方の基礎最近接丸め五捨六入エクセル関数五捨五超入銀行丸め

1. 銀行丸め(小数部で場合分け)

1. 小数部で場合分け
2. 反復丸め
3. 規則Aから規則Bへ

丸めのための関数

実数 x に対して,切り捨て,切り上げ,四捨五入,五捨五超入をする関数を F(x),C(x),R(x),Ř(x) とする。 \begin{align*} &F(x)=\begin{cases} \lfloor x\rfloor &x\ge 0\\\lceil x\rceil &x\le 0 \end{cases} &&C(x)=\begin{cases} \lceil x\rceil &x\ge 0\\\lfloor x\rfloor &x\le 0 \end{cases} \\ &R(x)=\begin{cases} \lfloor x+0.5\rfloor &x>-0.5\\\lceil x-0.5\rceil &x<0.5 \end{cases} &&\check{R}(x)=\begin{cases} \lceil x-0.5\rceil &x>-0.5\\\lfloor x+0.5\rfloor &x<0.5 \end{cases} \end{align*} 丸めの幅を d>0 として,切り捨て,切り上げ,四捨五入,五捨五超入をする関数を Fd(x),Cd(x),Rd(x),Řd(x) とする。 \begin{align*} &F^d(x)=F(x\div d)\times d,\qquad &&C^d(x)=C(x\div d)\times d \\ &R^d(x)=R(x\div d)\times d,\qquad &&\check{R}{}^d(x)=\check{R}(x\div d)\times d \end{align*}

小数部で場合分けする方法

実数 x に対して,整数部を Int(x)=⌊x⌋,小数部を Frac(x)=x−⌊x⌋ とする。 銀行丸めをすると,x の小数部が0.5なら丸めの幅を2として四捨五入(または五捨五超入)され, 小数部が0.5でないなら丸めの幅を1として四捨五入(または五捨五超入)される。 \[ \lfloor x\rceil =\begin{cases} R^2(x) &\operatorname{Frac}(x)=0.5 \\ R^1(x) &\operatorname{Frac}(x)\ne 0.5 \end{cases} \] 負数を含む任意の数値に対して,1000ごとに銀行丸めをする場合は,基準値=1000 または 桁数=−3 とする。

=IF(MOD(数値/1000,1)=0.5,ROUND(数値/2,−3)∗2,ROUND(数値,−3))

次のページへ

1 2 3 Next

2. 銀行丸め(反復丸め)

1. 小数部で場合分け
2. 反復丸め
3. 規則Aから規則Bへ

四捨五入の表現

丸めの幅を0.5として切り捨て,その結果を丸めの幅を1として切り上げると,四捨五入になる。 区間 [0.0, 0.5) は 0.0≤x<0.5 を満たす実数 x の集まりである。

xの範囲切り捨て(0.5)切り上げ(1)
[−0.5, 0.0)→ −0.5→ 0
[0.0, 0.5)→ 0.0→ 0
[0.5, 1.0)→ 0.5→ 1
[1.0, 1.5)→ 1.0→ 1

四捨五入は,切り捨てと切り上げの繰り返しで表現できる。 \[ R^1(x)=C^1(F^{0.5}(x)),\qquad R^2(x)=C^2(F^1(x)) \]

五捨五超入の表現

丸めの幅を0.5として切り上げ,その結果を丸めの幅を1として切り捨てると,五捨五超入になる。

xの範囲切り上げ(0.5)切り捨て(1)
(−0.5, 0.0]→ 0.0→ 0
(0.0, 0.5]→ 0.5→ 0
(0.5, 1.0]→ 1.0→ 1
(1.0, 1.5]→ 1.5→ 1

五捨五超入は,切り上げと切り捨ての繰り返しで表現できる。 \[ \check{R}{}^1(x)=F^1(C^{0.5}(x)),\qquad \check{R}{}^2(x)=F^2(C^1(x)) \]

銀行丸めの表現

丸めの幅を1として四捨五入した結果を丸めの幅を2として切り捨てたもの, 丸めの幅を1として五捨五超入した結果を丸めの幅を2として切り上げたものの平均値は銀行丸めになる。

xの範囲→ R1 → F2→ Ř1 → C2⌊x⌉
(−0.5, 0.5)→ 0 → 0+→ 0 → 0÷2=0
0.5→ 1 → 0+→ 0 → 0÷2=0
(0.5, 1.5)→ 1 → 0+→ 1 → 2÷2=1
1.5→ 2 → 2+→ 1 → 2÷2=2
(1.5, 2.5)→ 2 → 2+→ 2 → 2÷2=2

銀行丸めは,次のように求められる。 \[ \lfloor x\rceil =\frac{F^2(R^1(x))+C^2(\check{R}{}^1(x))}{2} \]

床関数と天井関数で表す方法

これを床関数と天井関数で表し,2回の反復丸めを1回にまとめる。 \begin{align*} \lfloor x\rceil &=\frac{F^2(R^1(x))+C^2(\check{R}{}^1(x))}{2} \\ &=\frac{\lfloor \lfloor x+0.5\rfloor \div 2\rfloor \times 2 +\lceil \lceil x-0.5\rceil \div 2\rceil \times 2}{2} \\ &=\lfloor (x+0.5)\div 2\rfloor +\lceil (x-0.5)\div 2\rceil \end{align*} 負数を含む任意の数値に対して,次のEXCEL数式で銀行丸めをすることができる。 1000ごとに銀行丸めをするときは,基準値=1000 または 桁数=−3 とする。

=ROUNDDOWN(数値/2+250,−3)+ROUNDUP(数値/2−250,−3)

3回の反復丸めで表す方法

上の方法において,R1(x)=C1(F0.5(x)),Ř1(x)=F1(C0.5(x)) を置き換える。 \[ \lfloor x\rceil =\frac{F^2(C^1(F^{0.5}(x)))+C^2(F^1(C^{0.5}(x)))}{2} \] 負数を含む任意の数値に対して,次のEXCEL数式で銀行丸めをすることができる。 1000ごとに銀行丸めをするときは,基準値=1000 または 桁数=−3 とする。

=ROUNDDOWN(ROUNDUP(ROUNDDOWN(数値∗2,−3)/2,−3)/2,−3)
  +ROUNDUP(ROUNDDOWN(ROUNDUP(数値∗2,−3)/2,−3)/2,−3)

2回の反復丸めで表す方法

上の方法において,C1(F0.5(x))=R1(x),C2(F1(x))=R2(x) を置き換える。 \[ \lfloor x\rceil =\frac{F^2(R^1(x))+R^2(C^{0.5}(x))}{2} \] 負数を含む任意の数値に対して,次のEXCEL数式で銀行丸めをすることができる。 1000ごとに銀行丸めをするときは,基準値=1000 または 桁数=−3 とする。

=ROUNDDOWN(ROUND(数値,−3)/2,−3)
  +ROUND(ROUNDUP(数値∗2,−3)/4,−3)

次のページへ

1 2 3 Next

3. 規則Aから規則Bへ

1. 小数部で場合分け
2. 反復丸め
3. 規則Aから規則Bへ

床関数の構成

数値の丸め方は,日本産業規格 JIS Z 8401:2019 に規定されていて,規則Aは銀行丸め,規則Bは四捨五入に相当する。 最近接丸めをする関数が「規則A」しか提供されていない場合に,「規則B」を構成するのは面倒である。 \[ x\xrightarrow{規則A}\lfloor x\rceil ,\qquad x\xrightarrow{規則B}\begin{cases} \lfloor x+0.5\rfloor &x\ge 0\\\lceil x-0.5\rceil &x<0 \end{cases} \]

次表にしたがって規則A(銀行丸め)と四則演算をすすめると床関数 ⌊x⌋ を構成することができる。 直前の計算結果を • と表している。

x2x−0.5⌊•⌉(•−0.5)/2⌊•⌉
[0.0, 0.5]→ [−0.5, 0.5]→ 0→ −0.25→ 0
(0.5, 1.0)→ (0.5, 1.5)→ 1→ 0.25→ 0
[1.0, 1.5]→ [1.5, 2.5]→ 2→ 0.75→ 1
(1.5, 2.0)→ (2.5, 3.5)→ 3→ 1.25→ 1

床関数 ⌊x⌋ は次のように規則A(銀行丸め) ⌊x⌉ で表すことができる。 \[ \lfloor x\rfloor =\lfloor (\lfloor x\times 2-0.5\rceil -0.5)\div 2\rceil \]

天井関数の構成

関数 f(x) に対して −f(−x) という変換をすると, 床関数 ⌊x⌋ は天井関数に,天井関数 ⌈x⌉ は床関数に変換される。 規則Aの丸め(銀行丸め) ⌊x⌉ は奇関数のため変化しない。 \[ \lfloor x\rfloor =-\lceil -x\rceil ,\qquad \lceil x\rceil =-\lfloor -x\rfloor, \qquad \lfloor x\rceil =-\lfloor -x\rceil \] 天井関数 ⌈x⌉ は次のように規則A(銀行丸め) ⌊x⌉ で表すことができる。 \begin{align*} \lceil x\rceil &=-\lfloor -x\rfloor =-\lfloor (\lfloor -x\times 2-0.5\rceil -0.5)\div 2\rceil \\ &=-\lfloor (-\lfloor x\times 2+0.5\rceil -0.5)\div 2\rceil \\ &=\lfloor (\lfloor x\times 2+0.5\rceil +0.5)\div 2\rceil \end{align*}

規則B(四捨五入)の構成

非負の実数 x に対する四捨五入は ⌊x+0.5⌋,五捨五超入は ⌈x−0.5⌉ である。 \begin{gather*} \lfloor x+0.5\rfloor =\lfloor (\lfloor x\times 2+0.5\rceil -0.5)\div 2\rceil \\ \lceil x-0.5\rceil =\lfloor (\lfloor x\times 2-0.5\rceil +0.5)\div 2\rceil \end{gather*} よって規則B(四捨五入) R(x) を,規則A(銀行丸め) ⌊x⌉ で表すことができる。 \[ R(x)=\begin{cases} \lfloor x+0.5\rfloor =\lfloor (\lfloor x\times 2+0.5\rceil -0.5)\div 2\rceil &x\ge 0\\ \lceil x-0.5\rceil =\lfloor (\lfloor x\times 2-0.5\rceil +0.5)\div 2\rceil &x<0 \end{cases} \]

規則A(銀行丸め)による他の丸めの表現

実数 x に対して,丸めの幅を 1 として規則A(銀行丸め)で丸める関数を Round(x) とする。 \[ \lfloor x\rceil =\text{Round}(x) \] 丸めの幅が 1 のとき,床関数 ⌊X⌋,天井関数 ⌈X⌉,規則B(四捨五入) R(X) は次のように表せる。
床関数=Round((Round(X∗2−0.5)−0.5)/2)
天井関数=Round((Round(X∗2+0.5)+0.5)/2)
規則B(X≥0のとき)=Round((Round(X∗2+0.5)−0.5)/2)
規則B(X<0のとき)=Round((Round(X∗2−0.5)+0.5)/2)
丸めの幅が D>0 のときは次のように丸められる。
床関数=Round((Round(X/D∗2−0.5)−0.5)/2)∗D
天井関数=Round((Round(X/D∗2+0.5)+0.5)/2)∗D
規則B(X≥0のとき)=Round((Round(X/D∗2+0.5)−0.5)/2)∗D
規則B(X<0のとき)=Round((Round(X/D∗2−0.5)+0.5)/2)∗D

最後のページです

1 2 3 Home

エクセル関数による銀行丸め

Home丸め方の基礎最近接丸め五捨六入エクセル関数五捨五超入銀行丸め

2012.12.24 作成 / 2020.4.25 更新

Home › エクセル関数による銀行丸め