SSブログ

これなんてバグ?四捨五入と思ってたら・・・ [AppleScript辞書はつくれるか?]

 

Apple Script には数値を丸めるコマンドがあります。

 round (|数値|) 

日本には四捨五入という計算方法がありますが、

Round文は、少し違うところで切り捨て切り上げをしているようです。

 

それについてちょっと気になることがありましたので実際に計算してみました。

 

こんなスクリプトを作ってみた。

set s to "" & return

set a to 0.0

 

repeat with i from 1 to 50

(* ) 合計の実数に、0.1(実数)づつ足していき、round文を使う *)

set a to a + 0.1

set b to round (a)

(* ) 130の整数を10(整数)で除算し、round文を使う *)

set c to i / 10

set d to round (c)

(* ) 130の整数を10(実数)で除算し、round文を使う *)

set e to i / 10.0

set f to round (e)

(* ) 0.13.0(実数)を10.0(実数)で除算し、round文を使う *)

set g to i * 1.0 -- | あらかじめに実数化しておく 12 => 12.0 |

set h to g / 10.0

set j to round (h)

set s to s & tab & (a as text) & "  =>  " & (b as text) & "    "

set s to s & tab & (c as text) & "  =>  " & (d as text) & "    "

set s to s & tab & (e as text) & "  =>  " & (f as text) & "     "

set s to s & tab & (h as text) & "  =>  " & (j as text) & return

end repeat

 

イ)~ 二)まで全て 0.1 ~ 5.0 の数字を発生させ Round文で丸めているというもの。

(図1)

まぁ、違いがあれどすべて同じ数字になるはず。 ・・・でした。

 

Round_ss.jpg

 

何だろう 元数値の2.5の部分で『イ)』(一番左)と 『ロ)ハ)ニ)』(右の3つ)で誤差が出てきてしまっているのです。なぜ?

 

さらにお気づきの方もいらっしゃると思いますが、

 0.5 => 0(切捨)

 1.5 => 2(切上げ)

 2.5 => ?(切捨?)

 3.5 => 4(切上げ)

 4.5 => 4(切捨)

と滅茶苦茶なんです。

 

これはどういうことなのか?

ググってみたらありました。


Jis丸めとは?』> http://homepage1.nifty.com/s_miyake/hp/jisround.htm

 

ざっと搔い摘むと、すぐ上の桁が『偶数だと5は切捨て↓』『奇数だと5は切上げ↑』というJIS規格があるということでしょうか?

う~ん、難しい。

 

とりあえず、

Round文を『四捨五入』または、『五捨六入』だと思って使ってる人がいましたら、今すぐ使用をやめた方が良いでしょう。

 

では、四捨五入はどうすれば良いかというと、

 

A)

my Rounding_off(|数値|)

 

on Rounding_off(ans)

if ans < 0 then

set flg to -1

absNum(ans)

else

set flg to 1

end if

if ((ans mod 1) < 0.5) then

set _res to (ans div 1)

else

set _res to ((ans div 1) + 1) * flg

end if

return _res

end Rounding_off

 

(* または *)

B)

set _res to round ans rounding as taught in school

 

と記述するのが良いようです。

まぁ、Bの方がかんたんやね。

 


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。