Поскольку прямые сравнения с плавающей запятой являются рискованными, я пишу один класс-оболочку для проверки реляционных операций для чисел с плавающей запятой.Неожиданный результат, когда параметр non type template используется в программе без назначения локальной переменной?
#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
Почему мой ответ неверен, когда параметр шаблона, не тип используется непосредственно в функции?
Я делаю что-то неправильно?
Стыдно! спасибо –