Afronden van getallen

C++:
Afronden van getallen

Hoe te:

C++ biedt meerdere manieren om getallen af te ronden, zoals floor(), ceil(), en round():

#include <iostream>
#include <cmath> // voor afrondingsfuncties

int main() {
    double num = 3.14;

    std::cout << "floor: " << std::floor(num) << "\n"; // Uitvoer: floor: 3
    std::cout << "ceil: " << std::ceil(num) << "\n";   // Uitvoer: ceil: 4
    std::cout << "round: " << std::round(num) << "\n"; // Uitvoer: round: 3

    // Voor vaste precisie, zoals afronden op twee decimalen:
    double precise_num = 3.146;
    double multiplier = 100.0;
    double rounded = std::round(precise_num * multiplier) / multiplier;

    std::cout << "afgerond op twee decimalen: " << rounded << "\n"; // Uitvoer: afgerond op twee decimalen: 3.15

    return 0;
}

Diepgaand

Voor C++11 was afronden afhankelijk van handmatige technieken of niet-standaard bibliotheken. Vandaag de dag biedt <cmath> robuuste methoden. floor() rondt naar beneden af, ceil() naar boven, terwijl round() naar het dichtstbijzijnde gehele getal gaat, zelfs bij het afhandelen van tie-breaks (0,5 gevallen) door af te ronden naar het even getal.

Het begrijpen van het gedrag van deze functies is cruciaal; bijvoorbeeld, negatieve getallen kunnen problemen veroorzaken (std::round(-2.5) resulteert in -2.0).

Alternatieven? Een klassieke truc was het casten naar een int na het toevoegen van 0,5 voor positieve getallen, maar dit faalt bij negatieve getallen en is niet type-agnostisch. Bibliotheken zoals Boost kunnen meer genuanceerde benaderingen bieden, terwijl taaluitbreidingen of compiler intrinsieken kunnen optimaliseren voor specifieke hardware.

Zie Ook