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
