Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Question sur la norme C et locales

3 réponses
Avatar
Vincent Lefevre
Bonjour,

Dans la norme, il est dit pour strtod:

-- one of INF or INFINITY, ignoring case

Est-ce que le "ignoring case" correspond à la locale C (i.e. par
rapport au jeu de caractères de base) ou à la locale courante
(i.e. par rapport à islower/isupper)?

J'ai voulu tester avec la glibc en "tr_TR.iso88599", mais les
développeurs n'ont pas dû réfléchir au problème, car ça bugge
(le "INF" n'est même pas accepté). J'ai fait un rapport de bug
ici:

http://sources.redhat.com/bugzilla/show_bug.cgi?id=1230

--
Vincent Lefèvre <vincent@vinc17.org> - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / SPACES project at LORIA

3 réponses

Avatar
Antoine Leca
En <news:20050823000746$,
Vincent Lefevre va escriure:
Dans la norme, il est dit pour strtod:
-- one of INF or INFINITY, ignoring case

Est-ce que le "ignoring case" correspond à la locale C (i.e. par
rapport au jeu de caractères de base) ou à la locale courante
(i.e. par rapport à islower/isupper)?


Logiquement, "C". La locale courante peut permettre d'autres séquences (et
dans le cas de ta locale turque, les séquences "inf" et "infinity", ignorant
la casse, devraient absolument être permises).

Le cas du séparateur décimal (qui varie suivant la locale) est un cas
particulier, avec un alinéa à part en 7.1.1.

J'ai voulu tester avec la glibc en "tr_TR.iso88599",


Taquin.

mais les développeurs n'ont pas dû réfléchir au problème,


:-)

car ça bugge (le "INF" n'est même pas accepté).


Ce qui est clairement inadmissible, c'est écrit en toutes lettres (je
suppose que "inf", lui, fonctionne).


Enfin tout cela, c'est mon avis.


Antoine

Avatar
Charlie Gordon
"Antoine Leca" wrote in message
news:def4u6$fr9$
En <news:20050823000746$,
Vincent Lefevre va escriure:
Dans la norme, il est dit pour strtod:
-- one of INF or INFINITY, ignoring case

Est-ce que le "ignoring case" correspond à la locale C (i.e. par
rapport au jeu de caractères de base) ou à la locale courante
(i.e. par rapport à islower/isupper)?


Logiquement, "C". La locale courante peut permettre d'autres séquences (et
dans le cas de ta locale turque, les séquences "inf" et "infinity", ignorant
la casse, devraient absolument être permises).

Le cas du séparateur décimal (qui varie suivant la locale) est un cas
particulier, avec un alinéa à part en 7.1.1.

J'ai voulu tester avec la glibc en "tr_TR.iso88599",


Taquin.

mais les développeurs n'ont pas dû réfléchir au problème,


:-)

car ça bugge (le "INF" n'est même pas accepté).


Ce qui est clairement inadmissible, c'est écrit en toutes lettres (je
suppose que "inf", lui, fonctionne).


Enfin tout cela, c'est mon avis.


C'est ce qui s'appelle mettre les points sur les i ;-)

Chqrlie.


Avatar
Vincent Lefevre
Dans l'article <def4u6$fr9$,
Antoine Leca écrit:

Ce qui est clairement inadmissible, c'est écrit en toutes lettres (je
suppose que "inf", lui, fonctionne).


Oui, le "inf" fonctionne, idem avec le "i" majuscule avec un point.
Ce sont les versions avec le "i" sans point (majuscule ou minuscule)
qui ne marchent pas.

En gros, la glibc convertit en minuscule et compare avec "inf".
Comme la conversion en minuscule dépend de la locale courante,
ça bugge pour "INF".

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / SPACES project at LORIA