std::numeric_limits::epsilon
Da cppreference.com.
< cpp | types | numeric limits
![]() | Questa pagina è stata tradotta in modo automatico dalla versione in ineglese della wiki usando Google Translate. La traduzione potrebbe contenere errori e termini strani. Muovi il puntatore sopra al testo per vedere la versione originale. Puoi aiutarci a correggere gli gli errori. Per ulteriori istruzioni clicca qui. |
static T epsilon() | (fino al c++11) | |
staticconstexpr T epsilon() | (dal C++11) | |
Restituisce l'epsilon macchina, cioè la differenza tra 1.0 e il successivo valore rappresentabile dalla virgola mobile
T
tipo. E ha senso solo se std::numeric_limits<T>::is_integer==false.Original:
Returns the machine epsilon, that is, the difference between 1.0 and the next value representable by the floating-point type
T
. It is only meaningful if std::numeric_limits<T>::is_integer==false.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Indice |
[modifica]Valore di ritorno
T | std::numeric_limits<T>::epsilon() |
/* non-specialized */ | T(); |
bool | false |
char | 0 |
signedchar | 0 |
unsignedchar | 0 |
wchar_t | 0 |
char16_t | 0 |
char32_t | 0 |
short | 0 |
unsignedshort | 0 |
int | 0 |
unsignedint | 0 |
long | 0 |
unsignedlong | 0 |
longlong | 0 |
unsignedlonglong | 0 |
float | FLT_EPSILON |
double | DBL_EPSILON |
longdouble | LDBL_EPSILON |
[modifica]Eccezioni
[modifica]Esempio
Viene illustrato l'utilizzo semplicistica di epsilon macchina di confrontare i valori in virgola mobile .
Original:
Demonstrates the simplistic use of machine epsilon to compare floating-point values.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
#include <cmath>#include <limits>#include <iomanip>#include <iostream>#include <type_traits> template<class T>typenamestd::enable_if<!std::numeric_limits<T>::is_integer, bool>::type almost_equal(T x, T y, int ulp){// the machine epsilon has to be scaled to the magnitude of the larger value// and multiplied by the desired precision in ULPs (units in the last place)return std::abs(x-y)<=std::numeric_limits<T>::epsilon()*std::max(std::abs(x), std::abs(y))* ulp;}int main(){double d1 =0.2;double d2 =1/std::sqrt(5)/std::sqrt(5); if(d1 == d2)std::cout<<"d1 == d2\n";elsestd::cout<<"d1 != d2\n"; if(almost_equal(d1, d2, 2))std::cout<<"d1 almost equals d2\n";elsestd::cout<<"d1 does not almost equal d2\n";}
Output:
d1 != d2 d1 almost equals d2
[modifica]Vedi anche
(C++11) (C++11) | prossimo valore rappresentabile in virgola mobile verso il valore dato Original: next representable floating point value towards the given value The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (funzione) |