60

Oui, c'est une solution. En ce qui concerne !!, c'est souvent utilisé de cette manière. Mais j'ai lu quelque part qu'il y a des compilateurs qui "optimisent" !! en le virant - je ne sais pas si c'est vrai, et si c'est vrai, je pense que ces compilateurs sont bogués (parce que tu n'es pas le seul à utiliser !! comme ça). Ce qui marche à coup sûr est: (condition1?1:0) & (condition2?1:0) | (condition3?1:0). Mais c'est long.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

61

Effectivement je suis loin d'être le seul à écrire ce truc. J'ai déjà vu ça dans des sources diverses. Pour moi il est clair que les compilateurs qui "optimisent" la double négation en la supprimant sont bogués. A mon avis ces compilos bogués doivent aussi "optimiser" des expressions telles que (x/2)*8 en x*4 et d'autre conneries du genre...

J'espère que GCC n'est pas bogué sur ces points !?
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

62

Je comprends que de supprimer le double '!' est un bogue, mais pourquoi optimiser (x/2)*8 en (x>>1)<<3 est un bogue (si x est un int) ?

63

Bon, tentons d'être clair (ce n'est pas plus compliqué que la double négation) smile

Disons que x est égal à 11. N'oublie pas que l'ordinateur compte en binaire, donc pour lui x égale %00001011

==== 1 =====
- Faisons x/2 : %00001011 / 2 = %00000101
- Multiplions par 8 : %00000101 * 8 = %00101000
- Bref : (x/2)*8 = %00101000 = 40

==== 2 =====
- Faisons x*4 : %00001011 * 4 = %00101100
- Bref : x*4 = %00101100 = 44
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

64

Ah merde, j'avais pas bien lu, je croyais que tu n'aimais pas les optimisations du genre : x*4 => x<<2
Et tu as raison, sinon, je suis d'accord, c'est un bogue d'optimiser 8.(x/2) en 4.x