4080

Ximoon (./4067) :
Justement, du coup c'est à la personne qui code de faire attention, et au moins on sait que l'on ne peut pas déléguer ça à d'obscures mécanismes liés au compilateur ou à l'interpréteur.
Sur des quantités massives de code complexe , c'est plus que prouvé que la vigilance humaine ne suffit pas.
Et là, on à justement la preuve que l'humain ne peut pas faire attention à tout. Le moteur V8 est codé en C++ par des gens qui savent très bien qu'ils doivent faire particulièrement attention.

Zeph (./4068) :
sauf en présence de bugs comme celui-ci (qui restent heureusement très rares).
De ce que j'ai lu de la part de personne travaillant sur Servo (le moteur expérimental de Mozilla), ça n'est pas si rare que ça. La majorité des exploits graves découverts dans les navigateurs ces dernières années viennent du JIT.
Servo utilise pour le moment le moteur SpiderMonkey en C++ de Firefox, mais ils étudient différentes pistes, certaines basées sur le langage Rust pour essayer de limiter les risques.
avatar

4081

Le moteur V8 est codé en C++ par des gens qui savent très bien qu'ils doivent faire particulièrement attention.

Sauf que le probleme n'est pas dans le code C++, mais pas du tout. Donc le code C++ est "fait avec attention". Le probleme est dans la logique de l'optimiseur et pour le coup ça n'a rien a voir avec le langage qui est dessous et sa sécurité ou non.
avatarProud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

4082

il y A des bugs de ce type dans les compilos C. Ici au taf sur une certaine routine pas si tordue on est obligée de désactiver spéficiquement les optimisations sinon elle fait une grosse bourde d'alignement de variables qui fout tout en l'air. C'est pas un compilo tordu, c'est armcc fourni par arm corp.

4083

C’est donc un compile tordu (Keil)et connu pour avoir pas mal de problèmes
avatarProud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

4084

4085

Godzil (./4081) :
Sauf que le probleme n'est pas dans le code C++, mais pas du tout. Donc le code C++ est "fait avec attention". Le probleme est dans la logique de l'optimiseur et pour le coup ça n'a rien a voir avec le langage qui est dessous et sa sécurité ou non.
Je voulais juste prendre l'exemple que j'avais sous la main, pour monter que l'attention du développeur a ses limites. C'est vrai qu'un compilateur JIT écrit dans n'importe quel langage pourrait faire la même erreur. Le dépassement de tampon n'est pas directement dans le code C++ mais dans le code généré.

Par contre on ne peut pas dire que le code est fait avec attention, vu que sa logique est foireuse. La notion de dépassement de tampon est une notion qui n'est pas censé être étrangère aux programmeur C++. D'autant plus pour les développeurs de moteurs de navigateurs qui sont très prudents sur la qualité du code générés. Ils sont tout a fait au courant que c'est un énorme risque de faille de sécurité.
avatar

4086

En l’occurence ce qui découle de l’erreur de base (supposer que cette fonction ne peux pas retourner -0) est la seule et véritable erreur.

Le JIT prétendant que function(X) ne peux pas retourner -0 il optimise en enlevant des choses qui sont en théorie inutile car ne “peuvent pas arriver” sauf que ça arrive.

L’erreur n’est pas dans l’optimisation à supprimer certaines vérifications, si les sites conditions ne peuvent vraiment pas arriver c’est du code inutile et “mort”.

La l’unique erreur c’est cette assumption. Donc ce n’est pas une erreur de qualité du code mais une erreur de compréhension des maths de la personne qui a introduit cette optimisation.

Le code fait exactement ce qu’on lui a demandé: “ça ne peux pas retourner -0”
avatarProud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

4087

Ou une erreur de la doc de la fonction ? Ou une erreur d'implémentation par rapport à une spec ?
avatar<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !

4088

Non une erreur de compréhension des maths.

Je viens de vérifier exactement quelle est la fonction, c’est

ex - 1

Expm1(-0) doit retourne -0. C’est dans la norme IEEE sur les flottants.
C’est bien une méconnaissance des maths qui est responsable.



(Edit1: correction d’une connerie
Edit2: re corrrection de ma re connerie)
avatarProud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

4089

Godzil (./4088) :

Expm1(-0) doit retourne -0. C’est dans la norme IEEE sur les flottants.
C’est bien une méconnaissance des maths qui est responsable.
Hm, pour moi ce n'est pas une méconnaissance des maths, mais de la norme IEEE sur les flottants, hein cheeky
avatar

4090

Oui mais c’est bel est bien correct.

C’est parce que tu travaille pas dans le domaine R complet.

-0 est différent de 0 car c’est pour représenter un nombre infiniment proche de 0, mais est légèrement en dessous.
Ce qui fait que exp(-0) est très légèrement moins que 1, et ce très légèrement moins que 1 - 1 “normal” donne un 0 très légèrement en dessous de 0, soit -0.

On travaille en flottant la, pas en entier, ni entier approximatif.


(Comprendre le “très légèrement en dessous de 0” comme quand tu travaille avec les limites “tendent vers 0 du côté des nombres négatifs )

Expm1 est fait spécialement pour traiter le cas de e^x-1 quand -1 < x < 1, sinon le faire “naïvement” à la mains avec un appel à exp(x)-1 provoquerait des erreurs d’arrondies

(C’est l’IEEE754 au passage. Elle n’est pas parfaite mais ce genre de choix comme pour expm1 n’est pas une erreur)
avatarProud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

4091

D'accord (mais, du coup, c'est bien un problème de norme et pas un problème de maths cheeky)
avatar

4092

Nil (./4091) :
D'accord (mais, du coup, c'est bien un problème de norme et pas un problème de maths cheeky)

C’est un mélange des deux si tu veux.

Celui qui a mis cette optimisation n’as pas compris le sens de -0 et a travaillé de manière intuitive (si on est en entier, oui exp(-0) == exp(0) == 1

En flottant non.

Je laisse les expert en math expliquer mieux que moi

(Juste pour le fun python:

SWNx

)
avatarProud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

4093

Sauf que c'est une bizarrerie de la représentation des floats et pas une vraie notion mathématique ce -0, donc pencil Nil ^^
avatarAll right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

4094

Bin c'est une vraie notion mathématique, quand même grin Ce n'est certes pas la notion classique d'entiers, mais c'est tout autant des maths (avec tout plein de théorèmes et de postulats) ^^
avatar<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

4095

Oui -0 == 0 sauf quand il n’est pas grin
avatarProud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

4096

Bah c'est du même ordre que quand tu dis que 23+1 = 0 ^^
avatar<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

4097

Bah je crayonne Nil et Zéro, dans R, par la définition même de 0, il n'a pas de signe...
avatarQue cache le pays des Dieux ? - Ximoon's Box - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

4098

Bien sûr, mais quand on travaille avec les flottants, on ne travaille pas dans |R ^^ On travaille dans un ensemble discret, avec des opérations qui ne sont plus associatives vu qu'on n'a par exemple pas toujours (a + b) + c = a + (b + c).
avatar<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

4099

Oui donc c'est un problème de compréhension de la norme, pas des maths, comme dit.
avatarQue cache le pays des Dieux ? - Ximoon's Box - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

4100

oui mais attention on a bien dit expm1(-0) pas expm(0)

vu que la fonction expm1 accepte de recevoir en argument -0 (qui est zero - epsilon) elle doit retourner le résultat correct et important de zero - epsilon.

l'importance de expm1 n'est pas arbitraire, cette fonction admet un développement limité très simple en zéro, ce qui la rend facile a calculer, la fonction est proportionnelle a f(x)=x quand x est proche de zéro, et ses variations sont aussi celles de f(x)=x

Tous les efforts sont faits pour bien rappeler que cette fonction garde le signe de son argument même dans les cas limites. C'est tout a fait légitime et exact mathématiquement.

4101

D'où tu tiens que -0 = zero - epsilon ? Ça me semble faux, -0 est une conséquence de la représentation des flottants IEEE mais c'est une valeur qui est strictement égale à zéro. Partant de là, on revient à la conclusion précédente : c'est un comportement peut-être logique mais à côté duquel il est clairement facile de passer quand on ne considère que l'approche mathématique de la fonction concernée.
avatarAll right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

4102

Zeph (./4101) :
-0 est une conséquence de la représentation des flottants IEEE mais c'est une valeur qui est strictement égale à zéro.
Pas tout à fait : 1 / +0 renvoie +∞, 1 / -0 renvoie -∞. Donc on ne peut pas dire que les deux soient strictement égaux.
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

4103

Oui, d'où justement la différence avec les définitions mathématiques habituelles, puisque malgré cette propriété je ne connais pas un langage dans lequel 0f != -0f (et de façon plus fiable je suppose que c'est clairement défini dans la spécification, si quelqu'un est motivé).
avatarAll right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

4104

C’est plus que de la motivation qu’il faut parce que malheureusement IEEE754 ne fait pas partit des standard “gratuit” :/

L’acces au document officiel est payant :/
avatarProud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

4105

On peut au moins trouver assez facilement des brouillons : http://754r.ucbtest.org/web-2008/drafts/archive/2006-10-04.pdf
avatar<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

4106

Effectivement, ils mentionnent ça :
Comparisons shall ignore the sign of zero (so +0 = −0).
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

4107

Quand vous codez en faisant de l'analyse descendante, ça vous arrive jamais d'enchainer les couches pour repousser le plus possible une fonction bien chiante à écrire ? grin
avatar<<< Kernel Extremist©®™ >>>
Feel the power of (int16) !

4108

A moins que tu ne cherche à écrire une usine, et sur ton produit final est du gaz, non il faut éviter.
avatarProud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

4109

Meme dans ces cas la godzil, tu perds du rendement si tu multiplies les etapes embarrassed

4110

Folco (./4107) :
Quand vous codez en faisant de l'analyse descendante, ça vous arrive jamais d'enchainer les couches pour repousser le plus possible une fonction bien chiante à écrire ? grin
Meuh non ! C'est comme si un chef déléguait un truc pénible à son subordonné pour pas se salir les mains ; personne ne ferait une chose pareille, voyons ! embarrassed
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo