数値を 1/32 で丸め、次に 1/100 で丸める必要があります。ただし、これを 1 つの丸めルールに変換する必要があります (古風なプログラムを使用して...)。元の数を掛けたり割ったりすることはできますが、2回丸めることはできません....
これを数学的に行う方法はありますか?
ありがとう!
クロス
数値を 1/32 で丸め、次に 1/100 で丸める必要があります。ただし、これを 1 つの丸めルールに変換する必要があります (古風なプログラムを使用して...)。元の数を掛けたり割ったりすることはできますが、2回丸めることはできません....
これを数学的に行う方法はありますか?
ありがとう!
クロス
使用しているもので関数を定義できる場合、最も読みやすい実装は次のようになります。
function round(x, interval){
//implementation left as an exercise to the reader
}
#rounds x by interval1, then by interval2
function doubleRound(x, interval1, interval2){
return round(round(x, interval1), interval2)
}
しかし、単純な算術演算しかない場合は、すべてを 1 つのステートメントに展開できます。
負でない数値 x を N の最も近い間隔に丸めるには、次の式を使用できます。
round(x,N) = floor((x + (N/2)) / N) * N
2 回丸めるには、関数自体をネストします。
round(round(x, N1), N2) = floor(((floor((x + (N1/2)) / N1) * N1) + (N2/2)) / N2) * N2
1/32 で丸め、次に 1/100 で丸めるには、次のようにします。
floor(((floor((x + ((1/32)/2)) / (1/32)) * (1/32)) + ((1/100)/2)) / (1/100)) * (1/100)