(ノート:OP以来this other questionと同じではない、明示的に0または-Infinityに向けて丸め、指定されません)Java:0よりむしろ-Infinityに丸められる整数除算を実行するにはどうすればよいですか?
JLS 15.17.2は、整数の除算がゼロに向かって丸めと言っています。肯定的な約数(負の除数の動作については気にしません)のように、floor()
のような振る舞いが必要な場合は、これを達成する最も簡単な方法はすべての入力に対して数値的に正しいですか?
int ifloor(int n, int d)
{
/* returns q such that n = d*q + r where 0 <= r < d
* for all integer n, d where d > 0
*
* d = 0 should have the same behavior as `n/d`
*
* nice-to-have behaviors for d < 0:
* option (a). same as above:
* returns q such that n = d*q + r where 0 <= r < -d
* option (b). rounds towards +infinity:
* returns q such that n = d*q + r where d < r <= 0
*/
}
long lfloor(long n, long d)
{
/* same behavior as ifloor, except for long integers */
}
(更新:私は両方int
とlong
算術演算のためのソリューションを持っていると思います)
この*重複して*いるが、私はそれを見つけることができない、それが重複しないならば、私はそれはStackOverflowのの3年以上後にまだ来ていないだけで、完全に驚いています。 –
残りの 'd <0 'の条件では、あなたは2つの反転した兆候があると思います。オプション(a)では '0 <= r <-d'、オプション(b)では' d
権利:ありがとう、私は除数の正のバージョンを意味した。 (それは+無限に向かって丸めていたはずです) –