数値の丸め処理

Clojure:
数値の丸め処理

方法:

Clojureでは、主にMath/roundMath/floor、そしてMath/ceilを使用します:

(Math/round 3.5) ; => 4
(Math/round 3.4) ; => 3

(Math/floor 3.7) ; => 3.0
(Math/ceil 3.2)  ; => 4.0

特定の小数点まで丸める場合、乗算、丸め、除算を行います:

(let [num 3.14159
      scale 1000]
  (/ (Math/round (* num scale)) scale)) ; => 3.142

深く掘り下げて

かつて、高度なプログラミング言語がなかった時代には、数値の丸めは手作業で行われ、そう考えると珠算や紙を使ったものです。プログラミングでは、浮動小数点の精度の限界のため、数値表現にとって不可欠です。

丸めの代替手段には、精度管理のためのBigDecimalクラスの使用や、clojure.math.numeric-towerのような高度な数学関数のライブラリがあります。ClojureのMath/roundはJavaのMath.roundMath/floor、そしてMath/ceil関数に依存しているため、同じ浮動小数点と倍精度のニュアンスを継承しています。

実装に関しては、Clojureで丸めを行う際には、小数を扱うと自動的に倍精度が使われることを覚えておいてください。丸め誤差には注意が必要です!

参照