「◆JIS丸め」の編集履歴(バックアップ)一覧はこちら
◆JIS丸め - (2008/12/03 (水) 20:03:37) の最新版との変更点
追加された行は緑色になります。
削除された行は赤色になります。
*情報
作者名:>>568
引用元:[[日本語プログラミング言語「なでしこ」スレ 4>http://pc11.2ch.net/test/read.cgi/tech/1213272571/]]
解説引用元:[[http://ja.wikipedia.org/wiki/端数処理>http://ja.wikipedia.org/wiki/%E7%AB%AF%E6%95%B0%E5%87%A6%E7%90%86]] 「最近接偶数への丸め」
*概要
なでしこ標準搭載の四捨五入の丸めではなく、最近接偶数への丸めを行います。
※最近接偶数への丸めとは~
端数が0.5より小さいなら切り捨て、
端数が0.5より大きいならは切り上げ、
端数がちょうど0.5なら、切り捨てと切り上げのうち結果が偶数となる方へ丸める。
(要するに、n桁目の数値が0,2,4,6,8ならば、切り捨てる。
n桁目の数値が1,3,5,7,9ならば、n桁目を1単位だけ増す。)
JIS Z 8401で規則Aとして定められていて、規則B(四捨五入)より「望ましい」とされている。
多数足し合わせても丸め誤差が累積しない。
「偶数への丸め」「最近接丸め」「JIS丸め」などとも呼ばれる。
*解説
***引数
S:丸めたい数値
N:下記参照
●整数丸め 小数点の左の桁で丸める。(引数Nは無し)
●数値丸め N桁目で丸める(小数点無視)
●有効数値丸め N桁の有効数字で丸める。
●小数点数値丸め 小数点N桁目で丸める。
***返り値
丸められた数値
*サンプルプログラム
//最近接丸めと四捨五入との差異確認例
「0.000450」を4で小数点数値丸めして言う。//0.0004
「0.000450」を4で小数点四捨五入して言う。//0.0005
//Nの差異確認てすてす
「12345.67890」を整数丸めして言う。//12346
「12345.67890」を7で有効数値丸めして言う。//12345.68
「12345.67890」を2で小数点数値丸めして言う。//12345.68
「12345.67890」を3で有効数値丸めして言う。//12300
「0.001234」を2で有効数値丸めして言う。//0.0012
*//本体
●整数丸め(Sを)
もしSの小数部分が0.5ならば
Sを奇数判定。
もし、それが1ならば、Sを切り上げ。
違えば、Sを切り下げ。
違えば、Sを四捨五入。
●数値丸め(SをNで)
もし、Sの1から「.」を文字検索>0ならば、Z=(_)-1。S=Sの「.」を空に単置換。
違えば、Z=Sのバイト数。
A=S/(10^(Sのバイト数))。B=AをNで小数点数値丸め。B=B×(10^Z)。Bで戻る。
●有効数値丸め(SをNで)
//有効数字N桁に丸める
D=0。1の間
E=Sの回数から1バイト抜き出す。
もし、E=「0」ならば、D=D+1。続ける。
もし、E=「.」ならば、続ける。
違えば、抜ける。
N=N+D。
(SをNで数値丸め)で戻る。
●小数点数値丸め(SをNで)
//小数点N桁目で丸める
A=Sの(N+1)桁端数。
もし、A>0.5ならば、S=SをNで小数点切り上げ。
もし、A=0.5ならば
B=(Sの(N)桁目)を奇数判定。
もし、B=1ならば、S=SをNで小数点切り上げ。
違えば、S=SをNで小数点切り下げ。
もし、A<0.5ならば、S=SをNで小数点切り下げ。
Sで戻る。
●桁目(SのV)
A=Sを(V)で小数点切り下げ。Aから1バイト右部分で戻る。
●桁端数(SのV)
A=Sを(V-1)で小数点切り下げ。「0.{SのAを空に単置換}」で戻る。
●奇数判定(Sの|Sを)
もし、S%2=1ならば、1で戻る。
違えば、0で戻る。
----
#comment()
----
*情報
作者名:>>568
引用元:[[日本語プログラミング言語「なでしこ」スレ 4>http://pc11.2ch.net/test/read.cgi/tech/1213272571/]]
解説引用元:[[http://ja.wikipedia.org/wiki/端数処理>http://ja.wikipedia.org/wiki/%E7%AB%AF%E6%95%B0%E5%87%A6%E7%90%86]] 「最近接偶数への丸め」
*概要
なでしこ標準搭載の四捨五入の丸めではなく、最近接偶数への丸めを行います。
※最近接偶数への丸めとは~
端数が0.5より小さいなら切り捨て、
端数が0.5より大きいならは切り上げ、
端数がちょうど0.5なら、切り捨てと切り上げのうち結果が偶数となる方へ丸める。
(要するに、n桁目の数値が0,2,4,6,8ならば、切り捨てる。
n桁目の数値が1,3,5,7,9ならば、n桁目を1単位だけ増す。)
JIS Z 8401で規則Aとして定められていて、規則B(四捨五入)より「望ましい」とされている。
多数足し合わせても丸め誤差が累積しない。
「偶数への丸め」「最近接丸め」「JIS丸め」などとも呼ばれる。
*解説
***引数
S:丸めたい数値
N:下記参照
●整数丸め 0桁目(小数点の左の桁)で丸める。(引数Nは無し)
●数値丸め N桁目で丸める(小数点無視)
●有効数値丸め N桁の有効数字で丸める。
●小数点数値丸め 小数点N桁目で丸める。
***返り値
丸められた数値
*サンプルプログラム
//最近接丸めと四捨五入との差異確認例
「0.000450」を4で小数点数値丸めして言う。//0.0004
「0.000450」を4で小数点四捨五入して言う。//0.0005
//Nの差異確認てすてす
「12345.67890」を整数丸めして言う。//12346
「12345.67890」を7で有効数値丸めして言う。//12345.68
「12345.67890」を2で小数点数値丸めして言う。//12345.68
「12345.67890」を3で有効数値丸めして言う。//12300
「0.001234」を2で有効数値丸めして言う。//0.0012
*//本体
●整数丸め(Sを)
もしSの小数部分が0.5ならば
Sを奇数判定。
もし、それが1ならば、Sを切り上げ。
違えば、Sを切り下げ。
違えば、Sを四捨五入。
●数値丸め(SをNで)
もし、Sの1から「.」を文字検索>0ならば、Z=(_)-1。S=Sの「.」を空に単置換。
違えば、Z=Sのバイト数。
A=S/(10^(Sのバイト数))。B=AをNで小数点数値丸め。B=B×(10^Z)。Bで戻る。
●有効数値丸め(SをNで)
//有効数字N桁に丸める
D=0。1の間
E=Sの回数から1バイト抜き出す。
もし、E=「0」ならば、D=D+1。続ける。
もし、E=「.」ならば、続ける。
違えば、抜ける。
N=N+D。
(SをNで数値丸め)で戻る。
●小数点数値丸め(SをNで)
//小数点N桁目で丸める
A=Sの(N+1)桁端数。
もし、A>0.5ならば、S=SをNで小数点切り上げ。
もし、A=0.5ならば
B=(Sの(N)桁目)を奇数判定。
もし、B=1ならば、S=SをNで小数点切り上げ。
違えば、S=SをNで小数点切り下げ。
もし、A<0.5ならば、S=SをNで小数点切り下げ。
Sで戻る。
●桁目(SのV)
A=Sを(V)で小数点切り下げ。Aから1バイト右部分で戻る。
●桁端数(SのV)
A=Sを(V-1)で小数点切り下げ。「0.{SのAを空に単置換}」で戻る。
●奇数判定(Sの|Sを)
もし、S%2=1ならば、1で戻る。
違えば、0で戻る。
----
- 鋼材の重量計算や銀行での勘定計算など実務に広く使える物なので助かるひと多いかとおもいました。 -- 鋼買 (2008-12-28 13:40:45)
- なるほどなー -- 管理人 (2008-12-29 02:48:10)
#comment()
----