• [^] # Re: Hack de vfscanf(3), quelques réponses

    Posté par . En réponse au message Hack de vfscanf(3), 4 questions. Évalué à 2.

    J'ai beau lire et relire ton code, autant je suis d'accord pour le traitement pour les entiers (bon, modulo le fait que je ne l'ai pas testé, je suis d'accord sur l'algo), autant je ne comprends pas comment tu veux pouvoir appliquer le même algo à des nombres flottants (quelque soit le type C, d'ailleurs).
    Les représentations machine des entiers permettent de prendre des blocs, avec décalages par bits et produits par des puissances de 2, c'est du classique. Mais les représentation machine des flottants... c'est d'un autre niveau, et je ne vois pas d'où tu peux sortir un
    while (w --) ret += ((u_quad_t) b[w]) << (w * CHAR_BIT);
    pour traiter des flottants...
    Je te conseille de regarder plus avant comment le C définit sa représentation des nombres flottants ([1] 6.2.5, 6.2.6., annexe F, et la norme IEC/IEEE qui va bien)... tu verras que c'est très libre comme définition, et que donc un traitement 'binaire' des nombres flottants est loin d'être facile (et je ne parle même pas de portabilité)... Et regarde aussi [2], c'est un doc que j'ai trouvé il y a peu, mais qui est très intéresant sur le calcul flottant (et qui parle assez simplement de la norme IEEE). Ou sinon wikipedia, il doit aussi y avoir de l'info, je suppose...

    A vrai dire, je ne sais pas comment c'est représenté en machine, par exemple. dans quel ordres sont mis (ou peuvent être mis) le signe, l'exposant ou la mantisse, ni quelle marge il y a pour les types C associés : la permière page de l'annexe F dit que float et double sont associés exactement à des types IEC, et que long double peut être un parmi plusieurs types IEC, mais je en sais pas comment ces dits types sont définis eux-mêmes - je te laisse le soin de creuser la question... Et, en derniers recours, c'est la doc de ta plate-forme (voire de ton processeur) qui dit comment tu dois faire.

    Pour en revenir à ton application, fonctionnellement, pourquoi as-tu besoin de faire de tels traitements ? Ton appli transfère des informations entre différentes machines ? Tu veux parser des fichiers binaires ?

    [1] http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf
    [2] http://cch.loria.fr/documentation/IEEE754/ACM/goldberg.pdf