내가 매트랩, C++ 예를 들어구현 matlab에의 EPS (x)의 기능 ++
에 matlab에의 eps(x)
기능을 구현하기 위해 노력하고있어 :
>> eps(587.3888)
ans = 1.1369e-13
>> eps(single(587.3888))
ans = 6.1035e-05
을 그러나, 나는 C에서이 작업을 수행 할 때 ++ 올바른 단 정밀도 응답을 얻을 수 없습니다. 나는 다음과 같은 출력을 얻을 프로그램을 실행
는#include <limits>
#include <iostream>
#include <math.h>
#define DEBUG(x) do { std::cerr << x << std::endl; } while (0)
#define DEBUG2(x) do { std::cerr << #x << ": " << x << std::endl; } while (0)
int main() {
float epsf = std::numeric_limits<float>::epsilon();
DEBUG2(epsf);
double epsd = std::numeric_limits<double>::epsilon();
DEBUG2(epsd);
float espxf = nextafter(float(587.3888), epsf) - float(587.3888);
double espxd = nextafter(double(587.3888), epsd) - double(587.3888);
DEBUG2(espxf);
DEBUG2(espxd);
}
: 출력이 nextafter
기능에만 출력을 사용하여 단일 및 이중 정밀도는 EPS 값이 올지라도 어떤 이유로 것처럼
$ ./a.out
epsf: 1.19209e-07
epsd: 2.22045e-16
espxf: -1.13687e-13
espxd: -1.13687e-13
보인다 배정 밀도 값 epsxf
에 대한 내 값은 Matlab에서와 같이 6.1035e-05 여야합니다.
의견이 있으십니까?
MATLAB의 eps는 항상 긍정적 인 결과를 제공합니다. 위 코드는'x'가'epsf'보다 큰 경우 부정적인 결과를 낳습니다. [여기] (http://coliru.stacked-crooked.com/a/68546c8c401c0610) 고정 코드 :'double eps (float x) {float xp = std :: abs (x); double x1 = std :: nextafter (xp, xp + 1.0f); return x1 - xp; }' – legends2k