57 votes

Opérateurs intégraux quot et div

La classe de type Intégral a deux opérations quot et div Pourtant, dans le rapport sur le langage Haskell 2010, il n'est pas précisé ce qu'ils sont censés faire. En supposant que div est une division intégrale, que fait quot différemment, ou quel est le but de quot ? Quand utilisez-vous l'un, et quand l'autre ?

1 votes

Ce lien semble prometteur : cdsmith.wordpress.com/2007/06/02/

110voto

augustss Points 15750

Pour citer la section 6.4.2 du rapport Haskell :

Le site quot , rem , div et mod Les méthodes de la classe satisfont à ces lois si y est non nul :

(x `quot` y)*y + (x `rem` y) == x  
(x `div`  y)*y + (x `mod` y) == x

quot est une division entière tronquée vers zéro, tandis que le résultat de div est tronquée vers l'infini négatif.

Le site div est souvent la plus naturelle à utiliser, alors que la fonction quot correspond à l'instruction machine sur les machines modernes, elle est donc un peu plus efficace.

5 votes

+1 pour la discussion sur les cas où l'on peut préférer l'un à l'autre.

21 votes

Ou, de manière équivalente, le résultat de mod a le même signe que le diviseur, tandis que le résultat de rem a le même signe que le dividende

0 votes

Merci pour la réponse, en particulier pour avoir mentionné le paragraphe dans les RH. Je ne cherchais que dans le chapitre 9.

34voto

Stuart Golodetz Points 12679

Les deux se comportent différemment lorsqu'il s'agit de nombres négatifs. Réfléchissez :

Hugs> (-20) `divMod` 3
(-7,1)
Hugs> (-20) `quotRem` 3
(-6,-2)

Ici, -7 * 3 + 1 = -20 et -6 * 3 + (-2) = -20 mais les deux méthodes donnent des réponses différentes.

Voir aussi ici : http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html

La définition de quot est "division d'un nombre entier tronquée vers zéro", alors que la définition pour div est "division d'un nombre entier tronquée vers l'infini négatif".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X