M'étant intéressé au format des nombres flottants pour écrire ma
fonction de conversion en Hexadécimal, je me suis amusé à décortiquer
le format IEEE 754 doublé précision.
Le résultat (temporaire) se trouve ici :
<http://www.miakinen.net/tmp/number.js>
<http://www.miakinen.net/tmp/toHexa>
Mes tests semblent montrer que cela fonctionne bien, malgré une
bidouille que j'ai dû faire à cause des erreurs d'arrondi dans le
calcul des log.
Attention cependant : je ne peux pas distinguer les deux zéros (+0 et
-0) ni les (2^53 - 2) valeurs différentes de NaN (Not a Number), j'ai
donc dû choisir. Pour 0 j'affiche l'encodage IEEE de +0, quand à NaN
j'affiche celui qui est juste à côté de +infini.
Il est amusant de noter que dans l'immense majorité des cas, lorsque le
premier chiffre non nul de la représentation hexa est un 1, alors tous
les chiffres suivants se retrouvent tels quels dans la représentation
IEEE 754 -- et réciproquement. Voir en particulier les multiples de 1/3
et 1/7, et les multiples de PI.
Cordialement,
--
Olivier Miakinen
Aidez Saburi à rester près de sa famille et poursuivre ses études
en France, signez la pétition :
http://www.fcpe94.ouvaton.org/article_petition.php3?id_article=9
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Olivier Miakinen
Attention cependant : je ne peux pas distinguer les deux zéros (+0 et -0)
Et pourtant si : je viens de trouver un moyen de les distinguer. Qui d'autre saura le faire ? YD peut-être ? Ou bien ASM ? À moins que ce ne soit Francis ? Les paris sont ouverts !
-- Olivier Miakinen Aidez Saburi à rester près de sa famille et poursuivre ses études en France, signez la pétition : http://www.fcpe94.ouvaton.org/article_petition.php3?id_article=9
Attention cependant : je ne peux pas distinguer les deux zéros (+0 et
-0)
Et pourtant si : je viens de trouver un moyen de les distinguer.
Qui d'autre saura le faire ? YD peut-être ? Ou bien ASM ? À moins
que ce ne soit Francis ? Les paris sont ouverts !
--
Olivier Miakinen
Aidez Saburi à rester près de sa famille et poursuivre ses études
en France, signez la pétition :
http://www.fcpe94.ouvaton.org/article_petition.php3?id_article=9
Attention cependant : je ne peux pas distinguer les deux zéros (+0 et -0)
Et pourtant si : je viens de trouver un moyen de les distinguer. Qui d'autre saura le faire ? YD peut-être ? Ou bien ASM ? À moins que ce ne soit Francis ? Les paris sont ouverts !
-- Olivier Miakinen Aidez Saburi à rester près de sa famille et poursuivre ses études en France, signez la pétition : http://www.fcpe94.ouvaton.org/article_petition.php3?id_article=9
ASM
Attention cependant : je ne peux pas distinguer les deux zéros (+0 et -0)
Et pourtant si : je viens de trouver un moyen de les distinguer. Qui d'autre saura le faire ? YD peut-être ? Ou bien ASM ? À moins que ce ne soit Francis ? Les paris sont ouverts !
Houlà là ! je n'ai jamais réussi à équilibrer une compta ce n'est pas pour aller me casser la tête avec des plus de moins que rien !
-- Stephane Moriaux et son [moins] vieux Mac
Attention cependant : je ne peux pas distinguer les deux zéros (+0 et
-0)
Et pourtant si : je viens de trouver un moyen de les distinguer.
Qui d'autre saura le faire ? YD peut-être ? Ou bien ASM ? À moins
que ce ne soit Francis ? Les paris sont ouverts !
Houlà là !
je n'ai jamais réussi à équilibrer une compta
ce n'est pas pour aller me casser la tête
avec des plus de moins que rien !
Attention cependant : je ne peux pas distinguer les deux zéros (+0 et -0)
Et pourtant si : je viens de trouver un moyen de les distinguer. Qui d'autre saura le faire ? YD peut-être ? Ou bien ASM ? À moins que ce ne soit Francis ? Les paris sont ouverts !
Houlà là ! je n'ai jamais réussi à équilibrer une compta ce n'est pas pour aller me casser la tête avec des plus de moins que rien !
-- Stephane Moriaux et son [moins] vieux Mac
Dr John Stockton
JRS: In article <diefsv$gat$, dated Mon, 10 Oct 2005 21:38:59, seen in news:fr.comp.lang.javascript, Olivier Miakinen <om+ posted :
Attention cependant : je ne peux pas distinguer les deux zéros (+0 et -0)
Et pourtant si : je viens de trouver un moyen de les distinguer. Qui d'autre saura le faire ? YD peut-être ? Ou bien ASM ? À moins que ce ne soit Francis ? Les paris sont ouverts !
Lisez s.v.p. mon <URL:http://www.merlyn.demon.co.uk/js-maths.htm#Float>; et puis mon http://www.merlyn.demon.co.uk/js-*.htm !
<QUOTE> There are special values :- The value NaN - Not-A-Number - is unequal to everything, including itself; there is a function isNaN. There are two non-finite numbers - plus and minus Infinity; there is a function isFinite. Plus and minus zero are representable and equal, but are distinguishable by comparing reciprocals. Denormals, where the exponent is lowest and the mantissa starts with 0, have lessened proportional resolution; the lowest is about 4.94e-324. </QUOTE>
X = +1/Infinity Y = -1/Infinity X == Y // true 1/X == 1/Y // false 1/X // Infinity 1/Y // -Infinity 1/(X*Y) // -Infinity
JRS: In article <diefsv$gat$1@cabale.usenet-fr.net>, dated Mon, 10 Oct
2005 21:38:59, seen in news:fr.comp.lang.javascript, Olivier Miakinen
<om+news@miakinen.net> posted :
Attention cependant : je ne peux pas distinguer les deux zéros (+0 et
-0)
Et pourtant si : je viens de trouver un moyen de les distinguer.
Qui d'autre saura le faire ? YD peut-être ? Ou bien ASM ? À moins
que ce ne soit Francis ? Les paris sont ouverts !
Lisez s.v.p. mon <URL:http://www.merlyn.demon.co.uk/js-maths.htm#Float>;
et puis mon http://www.merlyn.demon.co.uk/js-*.htm !
<QUOTE>
There are special values :-
The value NaN - Not-A-Number - is unequal to everything,
including itself; there is a function isNaN.
There are two non-finite numbers - plus and minus
Infinity; there is a function isFinite.
Plus and minus zero are representable and equal, but are
distinguishable by comparing reciprocals.
Denormals, where the exponent is lowest and the mantissa starts
with 0, have lessened proportional resolution; the lowest is about
4.94e-324.
</QUOTE>
X = +1/Infinity
Y = -1/Infinity
X == Y // true
1/X == 1/Y // false
1/X // Infinity
1/Y // -Infinity
1/(X*Y) // -Infinity
JRS: In article <diefsv$gat$, dated Mon, 10 Oct 2005 21:38:59, seen in news:fr.comp.lang.javascript, Olivier Miakinen <om+ posted :
Attention cependant : je ne peux pas distinguer les deux zéros (+0 et -0)
Et pourtant si : je viens de trouver un moyen de les distinguer. Qui d'autre saura le faire ? YD peut-être ? Ou bien ASM ? À moins que ce ne soit Francis ? Les paris sont ouverts !
Lisez s.v.p. mon <URL:http://www.merlyn.demon.co.uk/js-maths.htm#Float>; et puis mon http://www.merlyn.demon.co.uk/js-*.htm !
<QUOTE> There are special values :- The value NaN - Not-A-Number - is unequal to everything, including itself; there is a function isNaN. There are two non-finite numbers - plus and minus Infinity; there is a function isFinite. Plus and minus zero are representable and equal, but are distinguishable by comparing reciprocals. Denormals, where the exponent is lowest and the mantissa starts with 0, have lessened proportional resolution; the lowest is about 4.94e-324. </QUOTE>
X = +1/Infinity Y = -1/Infinity X == Y // true 1/X == 1/Y // false 1/X // Infinity 1/Y // -Infinity 1/(X*Y) // -Infinity
JRS: In article <diecvq$7ue$, dated Mon, 10 Oct 2005 20:49:16, seen in news:fr.comp.lang.javascript, Olivier Miakinen <om+ posted :
M'étant intéressé au format des nombres flottants pour écrire ma fonction de conversion en Hexadécimal, je me suis amusé à décortiquer le format IEEE 754 doublé précision.
JRS: In article <diecvq$7ue$1@cabale.usenet-fr.net>, dated Mon, 10 Oct
2005 20:49:16, seen in news:fr.comp.lang.javascript, Olivier Miakinen
<om+news@miakinen.net> posted :
M'étant intéressé au format des nombres flottants pour écrire ma
fonction de conversion en Hexadécimal, je me suis amusé à décortiquer
le format IEEE 754 doublé précision.
JRS: In article <diecvq$7ue$, dated Mon, 10 Oct 2005 20:49:16, seen in news:fr.comp.lang.javascript, Olivier Miakinen <om+ posted :
M'étant intéressé au format des nombres flottants pour écrire ma fonction de conversion en Hexadécimal, je me suis amusé à décortiquer le format IEEE 754 doublé précision.
Attention cependant : je ne peux pas distinguer les deux zéros (+0 et -0)
Et pourtant si : je viens de trouver un moyen de les distinguer. Qui d'autre saura le faire ? YD peut-être ? Ou bien ASM ? À moins que ce ne soit Francis ? Les paris sont ouverts !
X = +1/Infinity Y = -1/Infinity X == Y // true 1/X == 1/Y // false 1/X // Infinity 1/Y // -Infinity 1/(X*Y) // -Infinity
Bravo ! 1/+0 = +Infinity et 1/-0 = -Infinity. Il y a d'autres moyens plus compliqués, par exemple Math.pow(+0,-1) = +Infinity et Math.pow(-0,-1) = -Infinity.
En revanche, il n'existe aucun moyen de distinguer les 9 007 199 254 740 990 variantes possibles de NaN.
Attention cependant : je ne peux pas distinguer les deux zéros (+0 et
-0)
Et pourtant si : je viens de trouver un moyen de les distinguer.
Qui d'autre saura le faire ? YD peut-être ? Ou bien ASM ? À moins
que ce ne soit Francis ? Les paris sont ouverts !
X = +1/Infinity
Y = -1/Infinity
X == Y // true
1/X == 1/Y // false
1/X // Infinity
1/Y // -Infinity
1/(X*Y) // -Infinity
Bravo ! 1/+0 = +Infinity et 1/-0 = -Infinity.
Il y a d'autres moyens plus compliqués, par exemple
Math.pow(+0,-1) = +Infinity et Math.pow(-0,-1) = -Infinity.
En revanche, il n'existe aucun moyen de distinguer les
9 007 199 254 740 990 variantes possibles de NaN.
Attention cependant : je ne peux pas distinguer les deux zéros (+0 et -0)
Et pourtant si : je viens de trouver un moyen de les distinguer. Qui d'autre saura le faire ? YD peut-être ? Ou bien ASM ? À moins que ce ne soit Francis ? Les paris sont ouverts !
X = +1/Infinity Y = -1/Infinity X == Y // true 1/X == 1/Y // false 1/X // Infinity 1/Y // -Infinity 1/(X*Y) // -Infinity
Bravo ! 1/+0 = +Infinity et 1/-0 = -Infinity. Il y a d'autres moyens plus compliqués, par exemple Math.pow(+0,-1) = +Infinity et Math.pow(-0,-1) = -Infinity.
En revanche, il n'existe aucun moyen de distinguer les 9 007 199 254 740 990 variantes possibles de NaN.
Olivier Miakinen
M'étant intéressé au format des nombres flottants pour écrire ma fonction de conversion en Hexadécimal, je me suis amusé à décortiquer le format IEEE 754 double précision.
Je pense malgré tout que mon approche (qui passe par un unique calcul de logarithme) doit être plus rapide que : <cit.> while (Mt >= 2) { Ex++; Mt /= 2; } while (Mt < 1) { Ex--; Mt *= 2; } </cit.>
-- Olivier Miakinen Aidez Saburi à rester près de sa famille et poursuivre ses études en France, signez la pétition : http://www.fcpe94.ouvaton.org/article_petition.php3?id_article=9
M'étant intéressé au format des nombres flottants pour écrire ma
fonction de conversion en Hexadécimal, je me suis amusé à décortiquer
le format IEEE 754 double précision.
Je pense malgré tout que mon approche (qui passe par un unique calcul
de logarithme) doit être plus rapide que :
<cit.>
while (Mt >= 2) {
Ex++;
Mt /= 2;
}
while (Mt < 1) {
Ex--;
Mt *= 2;
}
</cit.>
--
Olivier Miakinen
Aidez Saburi à rester près de sa famille et poursuivre ses études
en France, signez la pétition :
http://www.fcpe94.ouvaton.org/article_petition.php3?id_article=9
M'étant intéressé au format des nombres flottants pour écrire ma fonction de conversion en Hexadécimal, je me suis amusé à décortiquer le format IEEE 754 double précision.
Je pense malgré tout que mon approche (qui passe par un unique calcul de logarithme) doit être plus rapide que : <cit.> while (Mt >= 2) { Ex++; Mt /= 2; } while (Mt < 1) { Ex--; Mt *= 2; } </cit.>
-- Olivier Miakinen Aidez Saburi à rester près de sa famille et poursuivre ses études en France, signez la pétition : http://www.fcpe94.ouvaton.org/article_petition.php3?id_article=9
ASM
M'étant intéressé au format des nombres flottants pour écrire ma fonction de conversion en Hexadécimal, je me suis amusé à décortiquer le format IEEE 754 double précision.
Je pense malgré tout que mon approche (qui passe par un unique calcul de logarithme) doit être plus rapide que : <cit.> while (Mt >= 2) { Ex++; Mt /= 2; } while (Mt < 1) { Ex--; Mt *= 2; } </cit.>
vous allez finir par griller vos processeurs à force !
:-)
-- Stephane Moriaux et son [moins] vieux Mac
M'étant intéressé au format des nombres flottants pour écrire ma
fonction de conversion en Hexadécimal, je me suis amusé à décortiquer
le format IEEE 754 double précision.
Je pense malgré tout que mon approche (qui passe par un unique calcul
de logarithme) doit être plus rapide que :
<cit.>
while (Mt >= 2) {
Ex++;
Mt /= 2;
}
while (Mt < 1) {
Ex--;
Mt *= 2;
}
</cit.>
vous allez finir par griller vos processeurs à force !
M'étant intéressé au format des nombres flottants pour écrire ma fonction de conversion en Hexadécimal, je me suis amusé à décortiquer le format IEEE 754 double précision.
Je pense malgré tout que mon approche (qui passe par un unique calcul de logarithme) doit être plus rapide que : <cit.> while (Mt >= 2) { Ex++; Mt /= 2; } while (Mt < 1) { Ex--; Mt *= 2; } </cit.>
vous allez finir par griller vos processeurs à force !
:-)
-- Stephane Moriaux et son [moins] vieux Mac
Dr John Stockton
JRS: In article <dihb6k$15c6$, dated Tue, 11 Oct 2005 23:32:51, seen in news:fr.comp.lang.javascript, Olivier Miakinen <om+ posted :
M'étant intéressé au format des nombres flottants pour écrire ma fonction de conversion en Hexadécimal, je me suis amusé à décortiquer le format IEEE 754 double précision.
Je pense malgré tout que mon approche (qui passe par un unique calcul de logarithme) doit être plus rapide que : <cit.> while (Mt >= 2) { Ex++; Mt /= 2; } while (Mt < 1) { Ex--; Mt *= 2; } </cit.>
Mais serait-il toujours exact? En faisant des calculs de meme genre, j'ai trouve que le calcul avec logarithms est souvent bon; bon pour le plupart des occasions; mais pas toujours exact. <URL:http://www.merlyn. demon.co.uk/js-demos.htm#DoRV>.
J'ai utilise (j'espere) ici seulement les operations qui seraient exacts sur les nombres IEEE Doubles.
JRS: In article <dihb6k$15c6$1@cabale.usenet-fr.net>, dated Tue, 11 Oct
2005 23:32:51, seen in news:fr.comp.lang.javascript, Olivier Miakinen
<om+news@miakinen.net> posted :
M'étant intéressé au format des nombres flottants pour écrire ma
fonction de conversion en Hexadécimal, je me suis amusé à décortiquer
le format IEEE 754 double précision.
Je pense malgré tout que mon approche (qui passe par un unique calcul
de logarithme) doit être plus rapide que :
<cit.>
while (Mt >= 2) {
Ex++;
Mt /= 2;
}
while (Mt < 1) {
Ex--;
Mt *= 2;
}
</cit.>
Mais serait-il toujours exact? En faisant des calculs de meme genre,
j'ai trouve que le calcul avec logarithms est souvent bon; bon pour le
plupart des occasions; mais pas toujours exact. <URL:http://www.merlyn.
demon.co.uk/js-demos.htm#DoRV>.
J'ai utilise (j'espere) ici seulement les operations qui seraient exacts
sur les nombres IEEE Doubles.
JRS: In article <dihb6k$15c6$, dated Tue, 11 Oct 2005 23:32:51, seen in news:fr.comp.lang.javascript, Olivier Miakinen <om+ posted :
M'étant intéressé au format des nombres flottants pour écrire ma fonction de conversion en Hexadécimal, je me suis amusé à décortiquer le format IEEE 754 double précision.
Je pense malgré tout que mon approche (qui passe par un unique calcul de logarithme) doit être plus rapide que : <cit.> while (Mt >= 2) { Ex++; Mt /= 2; } while (Mt < 1) { Ex--; Mt *= 2; } </cit.>
Mais serait-il toujours exact? En faisant des calculs de meme genre, j'ai trouve que le calcul avec logarithms est souvent bon; bon pour le plupart des occasions; mais pas toujours exact. <URL:http://www.merlyn. demon.co.uk/js-demos.htm#DoRV>.
J'ai utilise (j'espere) ici seulement les operations qui seraient exacts sur les nombres IEEE Doubles.
Je pense malgré tout que mon approche (qui passe par un unique calcul de logarithme) doit être plus rapide que : <cit.> while (Mt >= 2) { Ex++; Mt /= 2; } while (Mt < 1) { Ex--; Mt *= 2; } </cit.>
Mais serait-il toujours exact?
Non, bien sûr, mais cela se résout facilement en faisant une unique multiplication ou division par 2, au lieu d'en faire plus de mille dans le pire des cas.
En faisant des calculs de meme genre, j'ai trouve que le calcul avec logarithms est souvent bon; bon pour le plupart des occasions; mais pas toujours exact. <URL:http://www.merlyn.demon.co.uk/js-demos.htm#DoRV>.
Je confirme. Mes propres tests m'ont montré que le calcul de log(x)/LN2 suivi de floor() donnait parfois une valeur incorrecte, mais évidemment la valeur correcte était juste à côté (toujours dans le même sens sur les essais que j'ai faits, mais pour être sûr il vaut mieux toujours prévoir de tester la valeur +1 et la valeur -1).
Quel dommage que l'on n'ait pas de fonction logarithme en base 2, qui serait exacte par nature !
J'ai utilise (j'espere) ici seulement les operations qui seraient exacts sur les nombres IEEE Doubles.
Oui, j'en suis persuadé. Les multiplications et divisions par 2 (et par des puissances de 2) n'ont aucune raison de ne pas être justes tant que l'on reste dans les nombres finis « normalisés ». De même pour les additions et soustractions, tant que l'on reste dans des nombres entiers inférieurs à 2^53 (ou les mêmes multipliés ou divisés par des puissances de 2).
-- Olivier Miakinen Aidez Saburi à rester près de sa famille et poursuivre ses études en France, signez la pétition : <http://www.fcpe94.ouvaton.org/article_petition.php3?id_article=9>
Je pense malgré tout que mon approche (qui passe par un unique calcul
de logarithme) doit être plus rapide que :
<cit.>
while (Mt >= 2) {
Ex++;
Mt /= 2;
}
while (Mt < 1) {
Ex--;
Mt *= 2;
}
</cit.>
Mais serait-il toujours exact?
Non, bien sûr, mais cela se résout facilement en faisant une unique
multiplication ou division par 2, au lieu d'en faire plus de mille dans
le pire des cas.
En faisant des calculs de meme genre, j'ai trouve que le calcul avec
logarithms est souvent bon; bon pour le plupart des occasions; mais
pas toujours exact. <URL:http://www.merlyn.demon.co.uk/js-demos.htm#DoRV>.
Je confirme. Mes propres tests m'ont montré que le calcul de log(x)/LN2
suivi de floor() donnait parfois une valeur incorrecte, mais évidemment
la valeur correcte était juste à côté (toujours dans le même sens sur
les essais que j'ai faits, mais pour être sûr il vaut mieux toujours
prévoir de tester la valeur +1 et la valeur -1).
Quel dommage que l'on n'ait pas de fonction logarithme en base 2, qui
serait exacte par nature !
J'ai utilise (j'espere) ici seulement les operations qui seraient exacts
sur les nombres IEEE Doubles.
Oui, j'en suis persuadé. Les multiplications et divisions par 2 (et par
des puissances de 2) n'ont aucune raison de ne pas être justes tant que
l'on reste dans les nombres finis « normalisés ». De même pour les
additions et soustractions, tant que l'on reste dans des nombres entiers
inférieurs à 2^53 (ou les mêmes multipliés ou divisés par des puissances
de 2).
--
Olivier Miakinen
Aidez Saburi à rester près de sa famille et poursuivre ses études
en France, signez la pétition :
<http://www.fcpe94.ouvaton.org/article_petition.php3?id_article=9>
Je pense malgré tout que mon approche (qui passe par un unique calcul de logarithme) doit être plus rapide que : <cit.> while (Mt >= 2) { Ex++; Mt /= 2; } while (Mt < 1) { Ex--; Mt *= 2; } </cit.>
Mais serait-il toujours exact?
Non, bien sûr, mais cela se résout facilement en faisant une unique multiplication ou division par 2, au lieu d'en faire plus de mille dans le pire des cas.
En faisant des calculs de meme genre, j'ai trouve que le calcul avec logarithms est souvent bon; bon pour le plupart des occasions; mais pas toujours exact. <URL:http://www.merlyn.demon.co.uk/js-demos.htm#DoRV>.
Je confirme. Mes propres tests m'ont montré que le calcul de log(x)/LN2 suivi de floor() donnait parfois une valeur incorrecte, mais évidemment la valeur correcte était juste à côté (toujours dans le même sens sur les essais que j'ai faits, mais pour être sûr il vaut mieux toujours prévoir de tester la valeur +1 et la valeur -1).
Quel dommage que l'on n'ait pas de fonction logarithme en base 2, qui serait exacte par nature !
J'ai utilise (j'espere) ici seulement les operations qui seraient exacts sur les nombres IEEE Doubles.
Oui, j'en suis persuadé. Les multiplications et divisions par 2 (et par des puissances de 2) n'ont aucune raison de ne pas être justes tant que l'on reste dans les nombres finis « normalisés ». De même pour les additions et soustractions, tant que l'on reste dans des nombres entiers inférieurs à 2^53 (ou les mêmes multipliés ou divisés par des puissances de 2).
-- Olivier Miakinen Aidez Saburi à rester près de sa famille et poursuivre ses études en France, signez la pétition : <http://www.fcpe94.ouvaton.org/article_petition.php3?id_article=9>