Clojure:
数値の丸め処理
方法:
Clojureでは、主にMath/round
、Math/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.round
、Math/floor
、そしてMath/ceil
関数に依存しているため、同じ浮動小数点と倍精度のニュアンスを継承しています。
実装に関しては、Clojureで丸めを行う際には、小数を扱うと自動的に倍精度が使われることを覚えておいてください。丸め誤差には注意が必要です!