Dando un doppio tipo per la funzione di libreria sqrt in C

0

Il linguaggio di programmazione C di Ritchie dice che:

The library routine sqrt expects a double type and will produce nonsense if inadvertently handled something else. So if n is an integer, we can use sqrt((double) n) to convert the value of n to double.

Ma il seguente codice funziona correttamente sul mio sistema:

printf("%f",sqrt(9));

Inoltre, sta dando lo stesso risultato di sqrt((double)9) . Perché il mio compilatore non segue il libro?

    
posta user1369975 01.06.2013 - 16:38
fonte

2 risposte

2

Dipende se hai dichiarato la funzione prototipo, double sqrt(double); . (Il solito modo di farlo è con #include <math.h> .

Se lo hai, allora C convertirà implicitamente il parametro della funzione nel tipo corretto. In caso contrario, il compilatore accetterà comunque il tuo codice, ma 9 verrà erroneamente passato come int invece di essere convertito in double .

Tuttavia, ci sono alcuni compilatori che trattano sqrt come una funzione intrinseca e "sanno" che il suo parametro è un double anche se non lo dichiari.

    
risposta data 01.06.2013 - 17:26
fonte
1

a causa della conversione implicita, i nuovi compilatori aggiorneranno alcuni tipi per adattarsi al tipo di destinazione,

int raddoppia è una delle conversioni legali

    
risposta data 01.06.2013 - 16:42
fonte

Leggi altre domande sui tag