Esponenti in C
- Usa
powcome 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