ceil() 関数を使用して、浮動小数点計算の結果を最も近い整数に丸めています。あらゆる種類の異なる入力が経験されています...
int(ceil(A*B))
問題を説明するためのいくつかの例を次に示します。
int(ceil(1.01*100)) = 101
int(ceil(1.02*100)) = 102
int(ceil(1.03*100)) = 103
int(ceil(1.04*100)) = 104
int(ceil(1.05*100)) = 105
int(ceil(1.06*100)) = 106
int(ceil(1.07*100)) = 107
int(ceil(1.08*100)) = 108
int(ceil(1.09*100)) = 110 ***
int(ceil(1.10*100)) = 111 ***
int(ceil(1.11*100)) = 112 ***
int(ceil(1.12*100)) = 113 ***
int(ceil(1.13*100)) = 113
これは、実行中の浮動小数点計算に関係していることに気づきました...
1.09*100 = 109.000000.... > 109
このバグを確実にトラップする方法がわかりません
以下に概説するような「大まかな」方法がいくつかありますが、これが十分に堅牢なソリューションであるとは考えていません
int(ceil((1.09*100)-0.00000001)) = 109