Ecco cosa potrebbe accadere qui. Dovresti essere in grado di verificare ciò osservando l'implementazione del tuo compilatore della funzione pow
:
Supponendo di avere l'inclusione corretta, (tutte le risposte e i commenti precedenti sono corretti - non prendere i file #include
per scontato), il prototipo per la funzione standard pow
è questo:
double pow(double, double);
e si sta chiamando pow
come questo:
pow(5,2);
La funzione pow
passa attraverso un algoritmo (probabilmente utilizzando i logaritmi), quindi utilizza funzioni e valori in virgola mobile per calcolare il valore di potenza.
La funzione pow
non passare attraverso un ingenuo "moltiplicare il valore di x un totale di n volte", in quanto si deve calcolare anche pow
usando esponenti frazionari, e non è possibile calcolare potenze frazionarie in questo modo.
Quindi più che probabile, il calcolo di pow
utilizzando i parametri 5 e 2 ha provocato un leggero errore di arrotondamento. Quando hai assegnato a un int
, hai troncato il valore frazionario, ottenendo così 24.
Se si utilizzano numeri interi, si potrebbe scrivere la propria funzione "intpow" o simile che semplicemente moltiplica il valore il numero richiesto di volte .I vantaggi di questo sono:
Non si ottiene nella situazione in cui è possibile ottenere gli errori di arrotondamento sottili usando pow
.
La tua funzione intpow
verrà probabilmente eseguita più rapidamente di una chiamata equivalente a pow
.
Utilizzare 'float ele;' (e il formato di stampa '% f', come nel * precedente * codice) - cosa viene visualizzato? – user2864740
Puoi provare a prendere il valore di ritorno di 'pow' in una variabile' float' o 'double', quindi prova a convertirlo in' int'. Vedi se questo produce anche '24' o la risposta corretta' 25' –
@ Don'tYouWorryChild ya che funziona, ma perché non posso prendere il valore di ritorno di un pow in un int ?. In un test l'assistente mi ha detto "si puoi usare un int per ottenere il ritorno di un pow", quindi ... ha torto? – exsnake