¿Hay alguna diferencia entre Math.IEEERemainder (x, y) y x% y?¿Math.IEEERemainder (x, y) es equivalente a x% y?
13
A
Respuesta
12
No, no son equivalentes. MSDN muestra las diferentes fórmulas usadas para modulo y para IEEERemainder y tiene un programa de ejemplo corto que presenta las diferencias:
IEEERemainder = dividend - (divisor * Math.Round(dividend/divisor))
Modulus = (Math.Abs(dividend) - (Math.Abs(divisor) *
(Math.Floor(Math.Abs(dividend)/Math.Abs(divisor))))) *
Math.Sign(dividend)
Algunos ejemplos en los que tienen salida diferente/idéntica (tomado de MSDN):
IEEERemainder Modulus
3/2 = -1 1
4/2 = 0 0
10/3 = 1 1
11/3 = -1 2
27/4 = -1 3
28/5 = -2 3
17.8/4 = 1.8 1.8
17.8/4.1 = 1.4 1.4
-16.3/4.1 = 0.0999999999999979 -4
17.8/-4.1 = 1.4 1.4
-17.8/-4.1 = -1.4 -1.4
Ver también este bueno answer por sixlettervariables en una pregunta similar.
2
No, no son lo mismo; ver el documentation.
Aquí está la fuente:
public static double IEEERemainder(double x, double y) {
double regularMod = x % y;
if (Double.IsNaN(regularMod)) {
return Double.NaN;
}
if (regularMod == 0) {
if (Double.IsNegative(x)) {
return Double.NegativeZero;
}
}
double alternativeResult;
alternativeResult = regularMod - (Math.Abs(y) * Math.Sign(x));
if (Math.Abs(alternativeResult) == Math.Abs(regularMod)) {
double divisionResult = x/y;
double roundedResult = Math.Round(divisionResult);
if (Math.Abs(roundedResult) > Math.Abs(divisionResult)) {
return alternativeResult;
}
else {
return regularMod;
}
}
if (Math.Abs(alternativeResult) < Math.Abs(regularMod)) {
return alternativeResult;
}
else {
return regularMod;
}
}
Cuestiones relacionadas
- 1. x-y = x + 1 + ¬y problema
- 2. x, y = getPos() vs. (x, y) = getPos()
- 3. OS X equivalente a OutputDebugString()?
- 4. ¿Diferencia en la construcción del objeto usando "X x (42)" y "X x = 42"?
- 5. ¿Cuál es la diferencia entre x ++ y ++ x
- 6. Diferencia entre x: Clave y x: Nombre
- 7. ¿`y = x = x + 1;` comportamiento indefinido?
- 8. ¿Cuál es el resultado de X (X, X)?
- 9. Silverlight 4 Equivalente a WPF "x: estático"
- 10. polimorfismo C++ ((X *) y) -> foo() vs ((X) * y) .foo()
- 11. "x = ++ x" ¿es realmente indefinido?
- 12. Dylibs y OS X
- 13. ¿Cuál es el Linux/X11 (y Mac OS X) equivalente a la función Win API SetCapture()?
- 14. ¿Cuál es el LINQ equivalente a SUMA (CASO CUANDO X = Y THEN 1 ELSE 0 END)?
- 15. #if defined (x) || (y); es esto valido?
- 16. Beneficios (y consejos) de una actualización de JBoss 4.2.x a JBoss 5.x, 6.x, 7.x y WildFly 8.x?
- 17. ¿Es [x, y, z] .join ('') realmente más rápido que x + y + z para las cadenas?
- 18. si x = 3 y z no está asignado, ¿por qué z = x-- - --x evalúa a 2?
- 19. ¿Cuál es la diferencia en R entre idéntico (x, y) e isTRUE (all.equal (x, y))?
- 20. Buscar archivos anteriores a X y contarlos
- 21. queryover y (x como 'a' o y como 'a')
- 22. ¿Cuál es la diferencia entre las macros "#define STR (x) #x" y "#define STR (x) VAL (x)" con "#define VAL (x) #x"?
- 23. Es "int i = x ++, j = x ++;" ¿legal?
- 24. ¿Cómo declaras xey de modo que x + = y da un error de compilación y x = x + y no?
- 25. jQuery selector de atributo: [x = y] o [x = z]
- 26. mapa lambda x, y con una constante x
- 27. Diferencia entre "importar X" y "de X import *"?
- 28. MSChart Y-Axis y X-Axis etiquetado
- 29. ¿`X x = x = X();` legal C++?
- 30. ¿Hay alguna diferencia entre "Objeto [] x" y "Objeto x []"?
Me pregunto: ¿Por qué querría esos resultados? '11/3 = -1'? claramente el módulo aquí es 2. ¿Pero en qué escenarios querría '-1'? –
@RoyiNamir Tienes una respuesta aquí: http://stackoverflow.com/a/27378075/200443 – Maxence