std::numeric_limits::epsilon
来自cppreference.com
< cpp | types | numeric limits
|
|
This page has been machine-translated from the English version of the wiki using Google Translate.
The translation may contain errors and awkward wording. Hover over text to see the original version. You can help to fix errors and improve the translation. For instructions click here. |
| static T epsilon() |
(至 C++11) | |
| static constexpr T epsilon() |
(C++11 起) | |
返回的机器ε之间的差异由浮点类型1.0
T和下一个值表示的,即,。这是唯一有意义的,如果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.
目录 |
[编辑] 返回值
T
|
std::numeric_limits<T>::epsilon() |
| /* non-specialized */ | T();
|
| bool | false |
| char | 0 |
| signed char | 0 |
| unsigned char | 0 |
| wchar_t | 0 |
| char16_t | 0 |
| char32_t | 0 |
| short | 0 |
| unsigned short | 0 |
| int | 0 |
| unsigned int | 0 |
| long | 0 |
| unsigned long | 0 |
| long long | 0 |
| unsigned long long | 0 |
| float | FLT_EPSILON |
| double | DBL_EPSILON |
| long double | LDBL_EPSILON |
[编辑] 例外
[编辑] 为例
演示简单地使用机器精度浮点值比较.
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> typename std::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"; else std::cout << "d1 != d2\n"; if(almost_equal(d1, d2, 2)) std::cout << "d1 almost equals d2\n"; else std::cout << "d1 does not almost equal d2\n"; }
Output:
d1 != d2 d1 almost equals d2
[编辑] 另请参阅
| (C++11) (C++11) |
对给定值的下一个可表示的浮点值 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. (函数) |