Esponenti in C
-
Usa
pow
come funzione di esponenziazione in C - Usa funzione definita personalizzata per esponenziazione intera in C
Questo articolo illustrerà più metodi su come utilizzare le funzioni di esponenziazione in C.
Usa pow
come funzione di esponenziazione in C
La funzione pow
fa parte della libreria matematica C ed è definita nell’intestazione <math.h>
. La libreria matematica dovrebbe essere esplicitamente collegata quando si usa la toolchain del compilatore gcc
. Dovresti passare il flag -lm
durante la compilazione o includerlo nel file di sistema di compilazione corrispondente, se necessario. pow
è definito solo per i numeri in virgola mobile; pertanto, non dovrebbe essere utilizzato con numeri interi per risultati ottimali.
Nel seguente codice di esempio, mostriamo come calcolare l’ennesimo esponente di una singola variabile doppia
. pow
accetta due parametri: un numero di base per esponenziare e lo stesso esponente. Possiamo concatenare il risultato della funzione pow
nella chiamata printf
poiché restituisce il numero calcolato. Tuttavia, ci sono più errori per cercare input specifici, e tutti sono documentati in questa pagina.
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
double x = 10.0;
printf("x: %f\n", x);
printf("x^2: %f\n", pow(x, 2));
exit(EXIT_SUCCESS);
}
Produzione:
x: 10.000000
x^2: 100.000000
Usa funzione definita personalizzata per esponenziazione intera in C
In alternativa, possiamo definire la nostra funzione personalizzata per calcolare l’elevazione a potenza per i numeri interi. All’inizio implementiamo la funzione per i valori int
. L’implementazione è abbastanza semplice; l’iterazione con il cicli for
moltiplica l’intero di base per se stesso n
volte. La funzione restituisce il valore int
calcolato. Si noti che non controlla l’overflow del tipo intero e l’utente dovrebbe essere consapevole di questo fatto quando utilizza questa funzione.
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int exponentInt(const int base, int n) {
int i, p = base;
for (i = 1; i < n; ++i) p *= base;
return p;
}
int main() {
int x2 = 10;
printf("x2: %d\n", x2);
printf("x2^4: %d\n", exponentInt(x2, 4));
exit(EXIT_SUCCESS);
}
Produzione:
x2: 10
x2^4: 10000
L’implementazione precedente per la funzione di esponenziazione è limitata perché può arrivare solo fino a 232-1 per i numeri calcolati poiché il tipo int
stesso è limitato con lo spazio di archiviazione a 32 bit. Possiamo estendere questo limite con il tipo unsigned long
, che ha uno spazio a 64 bit sui sistemi corrispondenti. Pertanto, il valore calcolato della funzione di esponenziazione potrebbe salire a 264-1. Notare che questa funzione andrà in overflow dopo un certo punto, come mostrato nell’esempio seguente.
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
unsigned long exponentInteger(const unsigned long base, unsigned n) {
unsigned long i, p = base;
for (i = 1; i < n; ++i) p *= base;
return p;
}
int main() {
int x2 = 10;
printf("x2: %d\n", x2);
printf("x2^19: %lu\n", exponentInteger(x2, 19));
printf("x2^20: %lu\n", exponentInteger(x2, 20));
exit(EXIT_SUCCESS);
}
Produzione:
x2: 10
x2^19: 10000000000000000000
x2^20: 7766279631452241920
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook