Esponenti in C

Jinku Hu 12 ottobre 2023
  1. Usa pow come funzione di esponenziazione in C
  2. Usa funzione definita personalizzata per esponenziazione intera in C
Esponenti 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
Autore: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Articolo correlato - C Math