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