vendredi 24 mai 2013

Nan

J'ai testé cet exemple sur Oracle 10.

SQL> alter session set nls_language = 'FRENCH'
  2  /

Session modifiee.

SQL>


Voici un numéro en virgule flottante:

SQL> select -1d from dual
  2  /

       -1D
----------
 -1.0E+000

SQL>

La racine carrée de -1 n’est pas un vrai numéro, c’est un numéro complexe. Qu’est-ce qui se passe si on essaie de la calculer en Oracle? 

SQL> select sqrt(-1d) from dual
  2  /

 SQRT(-1D)
----------
       Nan

SQL>

La réponse était Nan. C’est un acronyme pour Not a number. C’est à dire Pas un numéro. Si on veut, on peut remplacer un Nan par un autre numéro de la manière suivante:

SQL> select nanvl(sqrt(-1d),0) from dual
  2  /

NANVL(SQRT(-1D),0)
------------------
                 0

SQL>

On peut aussi remplacer un Nan par un nul:

SQL> select nanvl(sqrt(-1d),null) from dual
  2  /

NANVL(SQRT(-1D),NULL)
---------------------


SQL>

Finalement, on peut tester une valeur pour verifier si elle soit un Nan:


SQL> select 'sqrt(-1) est un numéro complexe' from dual
  2  where sqrt(-1d) is nan
  3  /

'SQRT(-1)ESTUNNOMBRECOMPLEXE'
-------------------------------
sqrt(-1) est un numéro complexe

SQL> select 'sqrt(1) est un vrai numéro' from dual
  2  where sqrt(1d) is not nan
  3  /

'SQRT(1)ESTUNVRAINOMBRE'
--------------------------
sqrt(1) est un vrai numéro

SQL>

Aucun commentaire:

Enregistrer un commentaire