Numeriska begränsningar
Inkludera <limits>.
Mallklassen numeric_limits ger information om olika egenskaper för aritmetiska typer och finns specialiserad för följande typer:
float |
double |
long double |
short int |
unsigned short int |
int |
unsigned int |
long int |
unsigned long int |
long long int |
unsigned long long int |
char |
wchar_t (endast om implementerad som riktig typ och inte med typedef) |
unsigned char |
unsigned char |
bool (endast om implementerad som riktig typ och inte med typedef) |
numeric_limits deklarerar ett stort antal statiska medlemsfunktioner och datamedlemmar. Många av dessa är endast är relevanta för flyttalstyper och i de fall de inte är det har de värdet 0 eller false.
Medlemmar som är meningsfulla för alla specialiseringar
T anger den typ som numeric_limits instansierats för.
T min() | Returnerar det minsta värdet för typen T. |
T max() | Returnerar det största värdet för typen T. |
int radix | För flyttalstyper anger denna medlem basen eller radix för exponentens representationen (vanligtvis 2). För heltalstyper anger denna medlem basen för representationen. |
int digits | Anger antalet radixsiffror som kan representeras. För inbyggda heltalstyper är digits vanligtvis antalet bitar i representationen som ej är teckenbitar. För flyttalstyper är digits antalet radixsiffror i mantissan. Meningsfull om is_bounded är true. |
int digits10 | Returnerar antalet bas-10-siffror som kan representeras. Meningsfull om is_bounded är true. |
bool is_integer | Returnerar true om det är en heltalstyp. |
bool is_modulo | Returnerar true om modulo-typ. I allmänhet false för flyttalstyper, true för heltalstyper utan tecken (unsigned), och även true för heltalstyper med tecken på de flesta maskiner. För en modulo-typ om det är möjligt att addera två positiva tal och få ett resultat som är mindre. |
bool is_signed | Returnerar true om typen har tecken. |
Det finns fler medlemmar som är meningsfulla för alla specialiseringar.
Medlemmar som är specifika för flyttalstyper
T anger den typ som numeric_limits instansierats för.
T epsilon() | Returnerar maskinepsilon, dvs skillnaden mellan 1 och det minsta värde större än 1 som kan representeras för typen T. |
T round_error() | Returnerar uppskattningen av det maximala avrundningsfelet för typen T. |
int max_exponent10 | Anger det största positiva heltalet, sådant att 10 upphöjt till detta tal tillhör värdeintervallet. |
int min_exponent10 | Anger det minsta negativa heltal sådant att 10 upphöjt till detta tal tillhör värdeintervallet. |
int min_exponent | Anger det minsta negativa heltalet, sådant att radix upphöjt till 1 mindre än detta tal tillhör värdeintervallet. |
int max_exponent | Anger det största positiva heltalet sådant att radix upphöjt till 1 mindre än detta tal tillhör värdeintervallet. |
bool has_infinity | Är true om typen (bool) har en representation för positiva oändligheten. Ska vara true för varje typ som följer standarden IEC 559. |
bool has_quiet_NaN | Är true om typen har en representation för tyst (ej signalerande) Not a Number. Ska vara true för varje typ som följer standarden IEC 559. |
bool has_signaling_NaN | Är true om typen har en representation för att ange Not a Number. Ska vara true för varje typ som följer standarden IEC 559. |
bool is_iec559 | Är true om och endast om typen följer standarden IEC 559. |
round_style | Anger avrundningssätt för typen: round_indeterminate, round_toward_zero, round_to_nearest (närmast representerbara värde), round_toward_infinity, round_toward_neg_infinity. Specialiseringar för heltal ska returnera round_toward_zero. Hur dessa stilar definieras visas nedan. |
infinity() | Returnerar representationen för positiva oändligheten, om det finns sådan. Endast meningsfull om has_infinity är true. Krävs för typer som överensstämmer med IEC 559. |
quiet_NaN() | Returnerar representationen för ett tyst Not a Number om sådan finns för typen T. Endast meningsfull om has_quiet_NaN true. Måste vara meningsfull för typer som följer standarden IEC 559. |
signaling_NaN() | Returnerar representationen för ett signalerande Not a Number om sådan finns för typen T. Endast meningsfull om has_signaling_NaN är true. Måste vara meningsfull för typer som följer standarden IEC 559. |
Det finns ytterligare några medlemmar som är meningsfulla för alla specialiseringar. Avrundningsstilarna för flyttal definieras följande sätt i namnrymnden std:
enum float_round_style { round_indeterminate = -1, round_toward_zero = 0, round_to_nearest = 1, round_toward_infinity = 2, round_toward_neg_infinity = 3 };
För de tre flyttalstyperna float, double och long double finns följande funktioner (inkludera <cmath>):
bool isfinite(x) | returnerar true om x har ett ändligt värde, annars false. |
bool isinf(x) | returnerar true om x är oändligt, annars false. |
bool isnan(x) | returnerar true om x är NaN (Not a Number), annars false. |
bool isnormal(x) | returnerar true om x är normal dvs varken är noll, subnormal (googla...), oändligt eller NaN (Not a Number) annars false. |
bool isunordered(x, y) | returnerar true om antingen x eller y är NaN (Not a Number), annars false. |
int ifpclassify(x) | returnerar en av FP_INFINITE, FP_NAN, FP_NORMAL, FP_SUBNORMAL, FP_ZERO som anger kategorin för x. Dessa värden är makron som definieras av implementeringen (inkludera <cmath>). |
Exempel för int
#include <iostream> #include <limits> using namespace std; int main() { typedef numeric_limits<int> int_info; if (int_info::is_specialized) { cout << "Info i numeric_limits om int:\n"; cout << "min.......: " << int_info::min() << '\n'; cout << "max.......: " << int_info::max() << '\n'; cout << "radix.....: " << int_info::radix << '\n'; cout << "digits....: " << int_info::digits << '\n'; cout << "digits10..: " << int_info::digits10 << '\n'; cout << "is signed.: " << int_info::is_signed << '\n'; cout << "is integer: " << int_info::is_integer << '\n'; cout << "is exact..: " << int_info::is_exact << '\n'; cout << "traps.....: " << int_info::traps << '\n'; cout << "is modulo.: " << int_info::is_modulo << '\n'; cout << "is bounded: " << int_info::is_bounded << '\n'; } return 0; }
Se manualsidan för numeric_limits för mer information (man -s3c++ numeric_limits).
Sidansvarig: Tommy Olsson
Senast uppdaterad: 2012-08-10