GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
std::numeric_limits::epsilon(3) C++ Standard Libary std::numeric_limits::epsilon(3)

std::numeric_limits::epsilon - std::numeric_limits::epsilon


static T epsilon() throw(); (until C++11)
static constexpr T epsilon() noexcept; (since C++11)


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.


T std::numeric_limits<T>::epsilon()
/* non-specialized */ T()
bool false
char 0
signed char 0
unsigned char 0
wchar_t 0
char8_t (C++20) 0
char16_t (C++11) 0
char32_t (C++11) 0
short 0
unsigned short 0
int 0
unsigned int 0
long 0
unsigned long 0
long long (C++11) 0
unsigned long long(C++11) 0
float FLT_EPSILON
double DBL_EPSILON
long double LDBL_EPSILON


Demonstrates the use of machine epsilon to compare floating-point values for
equality

// Run this code


#include <cmath>
#include <limits>
#include <iomanip>
#include <iostream>
#include <type_traits>
#include <algorithm>


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 values used
// and multiplied by the desired precision in ULPs (units in the last place)
return std::fabs(x-y) <= std::numeric_limits<T>::epsilon() * std::fabs(x+y) * ulp
// unless the result is subnormal
|| std::fabs(x-y) < std::numeric_limits<T>::min();
}


int main()
{
double d1 = 0.2;
double d2 = 1 / std::sqrt(5) / std::sqrt(5);
std::cout << std::fixed << std::setprecision(20)
<< "d1=" << d1 << "\nd2=" << d2 << '\n';


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";
}


d1=0.20000000000000001110
d2=0.19999999999999998335
d1 != d2
d1 almost equals d2


nextafter
nextafterf
nextafterl
nexttoward
nexttowardf
nexttowardl next representable floating point value towards the given value
(C++11) (function)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)

2022.07.31 http://cppreference.com

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.