travaillant sur une application de calculatrice multiplateforme, je viens de remarquer que sur les valeurs W32 NaN/Inf sont converties différemment en chaînes que sur OSX/linux. à savoir.Comment est-ce que je fais printf utilise 'nan' sur w32?
linux/Mac OS X utilise nan
rsp inf
, alors que W32 utilise quelque chose comme 1.#INF
resp. 1.#QNAN
.
Quelle est la manière canonique d'obtenir une représentation identique sur toutes les plateformes?
je voudrais éviter de vérifier manuellement les valeurs avec isnan()
et isinf()
et les hardcoding inf
resp nan
représentations de chaîne. (J'ai lu un commentaire dans What is the difference between IND and NAN numbers que le véritable "coupable" est l'implémentation de la libc, plutôt que la plate-forme).
Il n'y en a tout simplement pas, aucune norme n'exige la représentation * string * de la valeur double. Pas même les valeurs doubles normales, parfois une période et parfois une virgule. La représentation MSVC est assez bancale, vous pouvez en faire un [beaucoup plus wonkier] (https://blogs.msdn.microsoft.com/oldnewthing/20130228-01/?p=5103) :) Vous devrez le faire cohérent vous-même. –
Qu'est-ce que le tricker, c'est que vous voulez probablement aussi l'inverse - en changeant le texte - et toutes ses variantes - dans un NaN. – chux