で二重の私は、マシンイプシロン、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。 com/w/cpp/types/numeric_limits/epsilon)? – StoryTeller
再現できません:... ... ipsilon long double:5.421011e-20' –
このコードの動作は環境に設定されている丸めモードに依存しているので、とにかくかなり壊れています。 –