在程序中使用非类型模板参数而不分配给局部变量时出现意外结果?
Unexpected result when non type template parameter is used in the program without assigning to local variable?
由于直接浮点比较有风险,我正在编写一个包装器 class 用于检查浮点数的关系运算。
#include<iostream>
#include <cmath>
template<unsigned int round_off_digits=10>
class FloatRelationalOperators
{
private:
inline static double calcEpsilonValue()
{
int localVar=round_off_digits;
double withLocalVar=pow(10, (localVar * -1 ));
double WithoutLocalVar=pow(10, (round_off_digits * -1 ));
std::cout<<"withLocalVar: "<<withLocalVar<<" "<<"WithoutLocalVar :"<<WithoutLocalVar;
return WithoutLocalVar;
}
public:
inline static bool notequal(double a,double b)
{
double res=fabs(a-b);
if( res <= calcEpsilonValue())
{
return true;
}
else
{
return false;
}
return false;
}
};
int main()
{
FloatRelationalOperators<>::notequal(10.1,10.0);
}
我正在尝试根据最大四舍五入数字计算 epsilon 值。
当我运行这个程序时,得到的结果如下,
withLocalVar: 1e-10 WithoutLocalVar :inf
为什么在函数中直接使用非类型模板参数时我的答案是错误的?
我做错了什么吗?
round_off_digits
是一个无符号值,你将它与 -1
相乘,得到一个相当大的无符号整数。如果你把它改成 int
就可以了
由于直接浮点比较有风险,我正在编写一个包装器 class 用于检查浮点数的关系运算。
#include<iostream>
#include <cmath>
template<unsigned int round_off_digits=10>
class FloatRelationalOperators
{
private:
inline static double calcEpsilonValue()
{
int localVar=round_off_digits;
double withLocalVar=pow(10, (localVar * -1 ));
double WithoutLocalVar=pow(10, (round_off_digits * -1 ));
std::cout<<"withLocalVar: "<<withLocalVar<<" "<<"WithoutLocalVar :"<<WithoutLocalVar;
return WithoutLocalVar;
}
public:
inline static bool notequal(double a,double b)
{
double res=fabs(a-b);
if( res <= calcEpsilonValue())
{
return true;
}
else
{
return false;
}
return false;
}
};
int main()
{
FloatRelationalOperators<>::notequal(10.1,10.0);
}
我正在尝试根据最大四舍五入数字计算 epsilon 值。
当我运行这个程序时,得到的结果如下,
withLocalVar: 1e-10 WithoutLocalVar :inf
为什么在函数中直接使用非类型模板参数时我的答案是错误的?
我做错了什么吗?
round_off_digits
是一个无符号值,你将它与 -1
相乘,得到一个相当大的无符号整数。如果你把它改成 int
就可以了