나는 기계 엡실론, C++의 다른 데이터 유형을 사용하여 1 + e > 1
을 제공 가능한 가장 작은 수 e
를 계산하고 싶었다. 나는 long double
행동을 설명 할 수 없다, 내가 기대 한 무엇기계 엡실론 긴 C 두 배로 ++
epsilon float: 5.96046447753906250e-008
epsilon double: 1.11022302462515650e-016
epsilon long double: -0.000000e+000
값 float
및 double
에 대한,하지만 :
여기 내 코드입니다 :
#include <cstdio>
template<typename T>
T machineeps() {
T epsilon = 1;
T expression;
do {
epsilon = epsilon/2;
expression = 1 + epsilon;
} while(expression > 1);
return epsilon;
}
int main() {
auto epsf = machineeps<float>();
auto epsd = machineeps<double>();
auto epsld = machineeps<long double>();
std::printf("epsilon float: %22.17e\nepsilon double: %22.17e\nepsilon long double: %Le\n", epsf, epsd, epsld);
return 0;
}
그러나 나는이 이상한 출력을 얻을.
누가 잘못되었는지 말해 줄 수 있습니까?
연습을 위해서입니까, 아니면 ['std :: numeric_limits :: epsilon'] (http : //en.cppreference. co.kr/w/cpp/types/numeric_limits/epsilon)? – StoryTeller
재생할 수 없음 : '... 엡실론 long double : 5.421011e-20' –
이 코드의 동작은 환경에 설정된 반올림 모드에 따라 다르므로, 어쨌든 꽤 깨졌습니다. –