Home 丸め方の基礎 最近接丸め 五捨六入 エクセル関数 五捨五超入 銀行丸め
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. 規則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)
上の方法において,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)
上の方法において,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. 規則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⌋ を構成することができる。 直前の計算結果を • と表している。
x | 2x−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*}
非負の実数 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} \]
丸めの幅が D>0 のときは次のように丸められる。
床関数 =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)
床関数 =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
最後のページです
2012.12.24 作成 / 2020.4.25 更新
Home › エクセル関数による銀行丸め