C++:
Arrotondamento dei numeri
Come fare:
C++ offre diverse modalità per arrotondare i numeri, come floor()
, ceil()
, e round()
:
#include <iostream>
#include <cmath> // per le funzioni di arrotondamento
int main() {
double num = 3.14;
std::cout << "floor: " << std::floor(num) << "\n"; // Output: floor: 3
std::cout << "ceil: " << std::ceil(num) << "\n"; // Output: ceil: 4
std::cout << "round: " << std::round(num) << "\n"; // Output: round: 3
// Per una precisione fissa, come l'arrotondamento a due decimali:
double precise_num = 3.146;
double multiplier = 100.0;
double rounded = std::round(precise_num * multiplier) / multiplier;
std::cout << "arrotondato a due decimali: " << rounded << "\n"; // Output: arrotondato a due decimali: 3.15
return 0;
}
Approfondimento
Prima di C++11, per arrotondare si faceva affidamento su tecniche manuali o librerie non standard. Oggi, <cmath>
fornisce metodi robusti. floor()
arrotonda verso il basso, ceil()
arrotonda verso l’alto, mentre round()
va all’intero più vicino, gestendo anche i casi di parità (0,5) arrotondando al numero pari.
Comprendere il comportamento di queste funzioni è cruciale; per esempio, i numeri negativi potrebbero ingannarti (std::round(-2.5)
produce -2.0
).
Alternative? Convertire in un int dopo aver aggiunto 0,5 per i numeri positivi era un trucco classico ma sbaglia con i negativi e non è agnostico rispetto al tipo. Librerie come Boost possono offrire approcci più sfumati, mentre estensioni del linguaggio o intrinseci del compilatore possono ottimizzare per hardware specifico.
Vedi Anche
- Riferimento C++ per
<cmath>
: https://en.cppreference.com/w/cpp/header/cmath - Standard IEEE per l’Aritmetica a Virgola Mobile (IEEE 754): https://ieeexplore.ieee.org/document/4610935
- Libreria di Conversione Numerica di Boost: https://www.boost.org/doc/libs/release/libs/numeric/conversion/