Mais une question que j'avais posée est : qu'est-ce qui peut pousser un développeur à utiliser cette fonction en dehors des bornes 0 .. 63 ?
A cette question je pourrais répondre bêtement en disant que je veux que la fonction suivante calcule le quotient de n par 2a pour toutes les valeurs de la plage des types de ses arguments.
functionquo_power2(n,a: natural)returnnatural;
Ça m'intriguait cette histoire, et je n'arrivais pas à admettre qu'un informaticien comme Xavier Leroy ait pu faire un tel choix sans une bonne raison. Pour faire de l'arithmétique entière, il y a une bibliothèque dédiée (écrite en collaboration) : Zarith qui ne fait pas partie de la distribution officielle ni de la bibliothèque standard (elle est volontairement minimaliste).
#require"zarith";;#install_printerZ.pp_print;;Z.shift_rightZ.one64;;-:Z.t=0Z.(shift_right(shift_leftone65)1);;-:Z.t=18446744073709551616Z.(shift_right(shift_leftone64)128);;-:Z.t=0Z.(shift_right(shift_leftone65)(-1));;Exception:Invalid_argument"Z.shift_right: count argument must be positive".
externalshift_right:t->int->t=shift_right@ASM(** Shifts to the right. This is an arithmetic shift, equivalent to a division by a power of 2 with rounding towards -oo. The second argument must be non-negative.*)
Le module Int64 (et son compagnon Int32) ne doivent pas spécialement être fait pour cela :
This module provides operations on the type int64 of signed 64-bit integers. Unlike the built-in int type, the type int64 is guaranteed to be exactly 64-bit wide on all platforms. All arithmetic operations over int64 are taken modulo 264
Performance notice: values of type int64 occupy more memory space than values of type int, and arithmetic operations on int64 are generally slower than those on int. Use int64 only when the application requires exact 64-bit arithmetic.
Ici comme la précision est fixe et que la performance n'est pas déjà au top, on laisse l'appelant se charger des vérifications s'il pense que cela est nécessaire, l'appelé ne fournissant que la garantie du bon résultat dans les bornes 0 .. 63 (du moins je suppute que c'est ce genre de considération qui a du influencer le choix de cette implémentation).
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Du haut niveau pour gérer correctement du bas niveau
Posté par kantien . En réponse au journal Un décalage de 64 bits, ça vous inspire comment ?. Évalué à 2.
Ça m'intriguait cette histoire, et je n'arrivais pas à admettre qu'un informaticien comme Xavier Leroy ait pu faire un tel choix sans une bonne raison. Pour faire de l'arithmétique entière, il y a une bibliothèque dédiée (écrite en collaboration) : Zarith qui ne fait pas partie de la distribution officielle ni de la bibliothèque standard (elle est volontairement minimaliste).
Son objectif est de faire de l'arithmétique sur
Zde manière efficace, et la doc de la fonctionshift_rightprécise qu'elle a bien le comportement souhaité :Le module Int64 (et son compagnon Int32) ne doivent pas spécialement être fait pour cela :
Ici comme la précision est fixe et que la performance n'est pas déjà au top, on laisse l'appelant se charger des vérifications s'il pense que cela est nécessaire, l'appelé ne fournissant que la garantie du bon résultat dans les bornes
0 .. 63(du moins je suppute que c'est ce genre de considération qui a du influencer le choix de cette implémentation).Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.