実数値をその値以下の最大の整数値に丸める。
Round a real number to the closest integer in the smaller side.
◆形式(Format)
#include <doublemath.h>
inline int myfloor(const double original)
◆引数(Arguments)
original
丸めたい実数。
The real number to be rounded.
◆戻り値(Return value)
floor(original+ZERO_THRESHOLD)の値を整数化したもの。
ZERO_THRESHOLDを加えるのは、本来は整数値であるべき実数値が
2進数の表現上の問題や計算の僅かな誤差によってその整数値よりも僅かに小さな値
になった場合に、その誤差のせいで整数化に際して1だけ値が狂うことを避けるため。
例えば(1.0/3.0)∗6.0は2.0になるべき量であるが
2進数の表現上の問題で1.99999999…になる。
したがってfloor((1.0/3.0)∗6.0)=1となってしまう。
しかしmyfloor関数ではZERO_THRESHOLDを加えてから整数化しているので
myfloor((1.0/3.0)∗6.0)=2となることが保証される。
The value of floor(original+ZERO_THRESHOLD) converted to an integer.
Here, ZERO_THRESHOLD is added to avoid an error of 1 in the result,
which may occur due to binary expressions of real numbers and numerical errors.
For example, (1.0/3.0)∗6.0 should be 2.0
but becomes 1.99999999… due to binary expressions.
This means that floor((1.0/3.0)∗6.0)=1.
Using the function myfloor,
ZERO_THRESHOLD is added before the rounding,
thereby ensuring that myfloor((1.0/3.0)∗6.0)=2.