Cos'è il Nan??

di il
8 risposte

Cos'è il Nan??

Ho confrontato float 3.141593 e #define 3.141593 e il risultato è nan. Perchè?

8 Risposte

  • Re: Cos'è il Nan??

    Confrontato dove? Come?
  • Re: Cos'è il Nan??

    
    #define answer 3.141593
    void main(int argc, char **argv) {
            float a = (argc - 2)?: strtod(argv[1], 0);
      
            if(a < answer)
                     puts("low");
            else if(a > answer)
                    puts("high");
            else
                    puts("ok");
    
    
    
    ok me lo da se da terminale faccio: nomeprogramma nan
    non riesco a capire il motivo. Ho capito solo che una costante è rappresentata da 8byte e il float da 4 byte.
  • Re: Cos'è il Nan??

    Scusa, ma hai capito cosa fa questa linea?
    
    float a = (argc - 2)?: strtod(argv[1], 0);
    
    Ho capito solo che una costante è rappresentata da 8byte e il float da 4 byte.
    Più che altro il compilatore assume che la costante answer sia un double.
    se scrivi
    
    #define answer 3.141593f // notare la f finale
    
    Il compilatore la interpreta come float.
  • Re: Cos'è il Nan??

    Lo so quindi answer verrà rappresentato in 8 byte ovvero 64 bit, con lo standard di rappresentazione IEEE 754 a doppia precisione a 64 bit, e quindi sarà una rappresentazione più precisa. Mentre float a verrà rappresentato con 4 byte in 32 bit con una rappresentazione meno precisa. Perciò:
    se gli passo come parametro da terminale 3.141953 avrò che a<answer sempre nonostante answer sia 3.141953 ma avendo un arrotondamento migliore sarà più grande.
    Ma perchè se gli passo nan mi ritorna "ok"?

    ps: printf("%i",sizeof(answer)); = 8
  • Re: Cos'è il Nan??

    NaN è un valore speciale implementation defined, che indica che la conversione da stringa a float è fallita. Nel tuo caso se la conversione fallisce NaN non è ne maggiore ne minore del valore di confronto per cui, per esclusione, resta l'opzione ok.
  • Re: Cos'è il Nan??

    Scusami e quale sarebbe la mia stringa?
  • Re: Cos'è il Nan??

    shodan ha scritto:


    NaN è un valore speciale implementation defined
    Esatto, ed è l'acronimo di Not a Number, quindi significa che non si riesce a rappresentare quello che si vorrebbe in forma numerica.
  • Re: Cos'è il Nan??

    Paolovox ha scritto:


    scusami e quale sarebbe la mia stringa?
    Cerca la stringa in questa linea ...

    strtod(argv[1], 0);
Devi accedere o registrarti per scrivere nel forum
8 risposte