strtod32, strtod64ou strtod128 Sous-routine

Objectif

Convertit une chaîne en nombre décimal à virgule flottante.

Bibliothèque

Bibliothèque C standard (libc.a)

Syntaxe

#include <stdlib.h>

_Decimal32 strtod32 (nptr, endptr)
const char *nptr;
char **endptr;

_Decimal64 strtod64 (nptr, endptr)
const char *nptr;
char **endptr;

_Decimal128 strtod128 (nptr, endptr)
const char *nptr;
char **endptr;

Descriptif

strtod32, strtod64, et les sous-routines strtod128 convertissent la partie initiale de la chaîne pointée par le paramètre nptr en _Decimal32, _Decimal64et _Decimal128 , respectivement. Tout d'abord, ces sous-routines décomposent la chaîne d'entrée en trois parties:
  • Une séquence initiale et éventuellement vide de caractères blancs (comme indiqué par la sous-routine isspace )
  • Une séquence de sujets interprétée comme une constante à virgule flottante ou représentant l'infini ou NaN
  • Chaîne finale d'un ou de plusieurs caractères non reconnus, y compris l'octet NULL de fin de la chaîne d'entrée
Ensuite, strtod32, strtod64, et les sous-routines strtod128 tentent de convertir la séquence de sujet en nombre à virgule flottante et renvoient le résultat.
La forme attendue de la séquence de sujet est un signe plus ou moins facultatif et l'un des éléments suivants:
  • Séquence non vide de chiffres décimaux pouvant contenir un caractère de base et une partie d'exposant
  • INF, INFINITY ou toute autre chaîne équivalente, à l'exception de la casse
  • NAN ou NAN (n-char-sequence opt), en ignorant la casse dans le NAN, où:
     n-char-sequence:
                   digit
                   n-char-sequence digit
    

La séquence de sujets est définie comme la sous-séquence initiale la plus longue de la chaîne d'entrée, en commençant par le premier caractère non blanc qui est de la forme attendue. La séquence d'objet ne contient pas de caractères si la chaîne large saisie n'est pas de la forme attendue.

Si la séquence de sujets a la forme attendue pour un nombre à virgule flottante, la séquence de caractères commençant par le premier chiffre ou le caractère de base (celui qui apparaît en premier) est interprétée comme une constante flottante selon les règles du langage C, sauf que la séquence n'est pas un nombre flottant hexadécimal ou que le caractère de base est utilisé à la place d'un point. Si ni une partie de l'exposant ni un caractère de base n'apparaît dans un nombre décimal à virgule flottante, une partie de l'exposant du type approprié avec une valeur de 0 est supposée suivre le dernier chiffre de la chaîne.

Si la séquence de sujets commence par un signe moins, la séquence est interprétée comme étant négative. Une séquence de caractères INF ou INFINITY est interprétée comme une infinité. Une séquence de caractères NAN ou NAN (n-char-sequence opt) est interprétée comme un NaNsilencieux. La signification des séquences n-char est définie par l'implémentation. Un pointeur vers la chaîne finale est stocké dans l'objet désigné par le paramètre endptr , à condition que le paramètre endptr ne soit pas un pointeur null.

Le caractère de base est défini dans l'environnement local du programme (catégorie LC_NUMERIC). Dans l'environnement local POSIX ou dans un environnement local où le caractère de base n'est pas défini, le caractère de base par défaut est un point.

Dans les environnements locaux autres que les environnements locaux C ou POSIX , d'autres séquences de sujets définies par l'implémentation peuvent être acceptées.

Si la séquence de sujet est vide ou n'a pas le format attendu, aucune conversion n'est effectuée. La valeur du paramètre nptr est stockée dans l'objet désigné par le paramètre endptr , à condition que le paramètre endptr ne soit pas un pointeur null.

strtod32, strtod64, et les sous-routines strtod128 ne modifient pas le paramètre de la variable globale errno en cas de réussite.

La valeur 0 est renvoyée en cas d'erreur et il s'agit également d'une valeur de retour valide en cas de réussite. Par conséquent, une application vérifiant les situations d'erreur doit définir la valeur de la variable globale errno sur 0, en appelant strtod32, strtod64, ou strto128 et vérifiez la variable globale errno .

Remarque: A partir de IBM® AIX® 6 avec niveau de technologie 7 et de IBM AIX 7 avec niveau de technologie 1, la précision des routines de conversion à virgule flottante, de la famille de fonctions printf et scanf a été augmentée de 17 chiffres à 37 chiffres pour les valeurs double et double longues.

Paramètres

Article Descriptif
nptr Contient un pointeur vers la chaîne à convertir en valeur à virgule flottante décimale.
endpr Contient un pointeur vers la position dans la chaîne spécifiée par le paramètre nptr lorsqu'un caractère non valide est détecté pour la conversion.

Valeurs renvoyées

Une fois l'opération terminée, strtod32, strtod64, et les sous-routines strtod128 renvoient la valeur convertie. Si aucune conversion ne peut être effectuée, la valeur 0 est renvoyée et la variable globale errno peut être définie sur EINVAL.

Si la valeur correcte se trouve en dehors de la plage des valeurs pouvant être représentées, ±HUGE_VAL_D32, ±HUGE_VAL_D64, ou ±HUGE_VAL_D128 est renvoyé (en fonction du type de retour et du signe de la valeur) et la variable globale errno est définie sur ERANGE.

Si la valeur correcte provoque un flux négatif, une valeur dont l'amplitude n'est pas supérieure au plus petit nombre positif normalisé dans le type de retour est renvoyée et la variable globale errno est définie sur ERANGE.