@omega
en démarrant le sujet avec Codeprod.i, et en changeant ensuite avec codeprod$, on ne peut pas utiliser la même méthode.
StructureUnion fonctionne, en tout cas, normalement. Avant de changer les types de données, il vaut mieux vérifier causes et effets de la méthode avec StructureUnion.
A quoi faut-il se contraindre ?
Quelles sont les conséquences indésirables à apréhender ?
La première contrainte c'est que le type quad 64 bits est impossible à trier avec un autre quad. 64+64 = 128 bits Trop grand !
L'autre contrainte c'est de ne trier que des nombres positifs, donc non signés. Le signe moins du dernier nombre se retrouvant au milieu de la plage de bits, l'état de signe (positif ou négatif) devient un état numérique compris dans le tri. Et malheureusement, c'est le 1 qui a été considéré comme signe négatif, et le zéro comme signe positif. En gros, en matière de signes, les nombres positifs
supérieurs aux nombres négatifs sont stockés sous la forme de l'état 0
inférieur à l'état 1 !
Grossière erreur des fabricants de processeurs !!
En tout cas, conséquemment, ça laisse quelques unions de types triables :
Code : Tout sélectionner
A+A+A+A+A+A+A+A (1 cas)
A+A+A+A+A+A+U (7 cas)
L+A+A+A+A (1 cas)
A+A+A+A+U+U (15 cas)
A+A+U+U+U (4 cas)
U+U+U+U (1 cas)
Un quad peut donc servir de tri dans 29 cas combinatoires de variables non signées.
Si on restreind le domaine de définition au nombres positif (entre 0 et 2 milliards), on peut ajouter 5 cas supplémentaires :
C'est ce dernier cas que j'ai mis en exemple. Donc ne pas oublier que ça se limite aux nombres entre 0 et 2 milliards.
A ton tour maintenant, d'expliquer les contraintes de tri de chaînes et mélanges de type possibles pour voir que finalement, ton utilisation ultime est plus lente, mais plus simple et plus souple !