Tipo clase Integral tiene dos operaciones quot
y div
, sin embargo, en el Haskell 2010 Language Report no se especifica qué se supone que deben hacer. Suponiendo que div
es una división integral, ¿qué significa quot
de manera diferente, o cuál es el propósito de quot
? ¿Cuándo usas uno y el otro?Operadores integrales quot vs. div
Respuesta
Para citar sección 6.4.2 del informe Haskell:
El quot
, rem
, div
, y mod
métodos de clase satisfacer las leyes de si Y es distinto de cero:
(x `quot` y)*y + (x `rem` y) == x
(x `div` y)*y + (x `mod` y) == x
quot
es número entero división truncada hacia cero, mientras que el resultado de div
se trunca hacia el infinito negativo.
La función div
es a menudo la más natural de usar, mientras que la función quot
corresponde a la instrucción de la máquina en máquinas modernas, por lo que es algo más eficiente.
+1 para la discusión de cuándo puede preferir uno sobre el otro –
o, de forma equivalente, el resultado de' mod' tiene el mismo signo que el divisor, mientras que el resultado de 'rem' tiene el mismo signo que el dividendo – newacct
Gracias por la respuesta, especialmente por mencionar el párrafo en el HR. Solo buscaba en el capítulo 9. – Ingo
Los dos se comportan de manera diferente cuando se trata de números negativos. Considere:
Hugs> (-20) `divMod` 3
(-7,1)
Hugs> (-20) `quotRem` 3
(-6,-2)
Aquí, -7 * 3 + 1 = -20
y -6 * 3 + (-2) = -20
, pero las dos formas en las que dan diferentes respuestas.
También, ver aquí: http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html
La definición de quot
es "división entera trunca hacia cero", mientras que la definición para div
es "división entera trunca hacia el infinito negativo".
Usted sabe, también hay ' divMod' y 'quotRem' ... – fuz
- 1. - vs - = operadores con numpy
- 2. JavaScript - === vs == operadores rendimiento
- 3. Diferencias en operadores booleanos: & vs && y | vs ||
- 4. Operadores de comparación Ruby? == vs. ===
- 5. integrales 2D en SciPy
- 6. UiBinder - HTMLPanel vs div
- 7. div # name vs #name
- 8. RedirectToAction() vs. View() y los operadores ternarios?
- 9. Operadores vs Funciones en C/C++
- 10. SVG rect vs div vs canvas
- 11. Ruby on Rails CSV poner " " en lugar de las cotizaciones reales
- 12. Tabla real vs. tabla div
- 13. Escapar " en Rails y Javascript
- 14. calcular integrales dobles en I rápidamente
- 15. ¿Qué son exactamente los tipos integrales?
- 16. DIV vs. Tablas o CSS vs. Ser estúpido
- 17. Operadores de comparación de JavaScript: Identidad vs. Igualdad
- 18. Operadores C# XOR:^vs^= y conversión de tipo implícita
- 19. 'Expresión regular' VS 'Operadores/funciones de comparación de cadenas'
- 20. ¿Cómo eliminar " de mi Json en javascript?
- 21. && = y = || operadores
- 22. + =, +, == y = operadores
- 23. Groovy *. Operadores
- 24. Cómo diferenciar integrales con biblioteca de espacio vectorial (haskell)
- 25. ¿Qué es un modismo común para convertir entre tipos integrales?
- 26. variables decimal Dividir en partes integrales y fracciones
- 27. ¿Beneficios de usar enumeraciones directamente usando tipos integrales?
- 28. Constantes integrales de C++ + operador de elección = ¡problema!
- 29. Div se mueve en IE
- 30. Operadores de incremento de prefijo/postfijo
Esto parece un enlace prometedor: http://cdsmith.wordpress.com/2007/06/02/learning-number-theory-and-haskell-the-division-algorithm/ –