Разница в Java, если таковая имеется, между оператором% и методом IEEEremainder ()? - PullRequest
5 голосов
/ 03 ноября 2011

Есть ли в Java какая-либо функциональная разница или разница в производительности между использованием оператора% для получения остатка целочисленного деления x / y и метода Math.IEEEremainder (x, y)?

Ответы [ 2 ]

10 голосов
/ 04 ноября 2011

Помимо разницы типов, уже отмеченной Джоном Б., есть и существенная разница в семантике.Math.IEEEremainder(x, y) возвращает x - n * y, где n является ближайшим целым числом к ​​x / y (принимая четное целое в случае связи), тогда как x % y возвращает x - n * y, где nявляется целочисленной частью x / y (т. е. n является результатом округления истинного значения x / y до нуля, а не до ближайшего).

Чтобы проиллюстрировать разницу: Math.IEEEremainder(9.0, 5.0) будетбыть -1.0, так как ближайшее целое число к 9.0 / 5.0 равно 2, а 9.0 - 2 * 5.0 равно -1.0.Но 9.0 % 5.0 будет 4.0, поскольку целая часть 9.0 / 5.0 равна 1, а 9.0 - 1 * 5.0 равна 4.0.

Вот официальная документация для Math.IEEEremainder.

1 голос
/ 03 ноября 2011

Math.IEEEremainder принимает и возвращает doubles и поэтому должен использоваться, когда вы хотите double результат.Если вы хотите модуль, используйте %, поскольку он дает int и будет более эффективным, чем double арифметика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...