invalid operands of types что делать?

155
02 марта 2018, 17:31

Добрый день. Проблема в чем? - выдает ошибку: "invalid operands of types 'double' and 'double(const char*) throw()' to binary 'operator=='"
Вот фрагмент кода, в котором выдает ошибку:

double Opredel(){
int swapc= triangulat();
double opredel=mat[0][0];
for(int i=1;i<size;i++){
  mat[i][i]= 0;
  opredel*=mat[i][i];
}
if(swapc % 2 != 0 ){
  opredel *=-1;
}
if(opredel == nan){
  opredel = 0;
}
return opredel;
}

Если будет не сложно, то объясните почему возникает эта ошибка, чтобы впредь таких не совершать. Спасибо.

Answer 1

Сравнивать с NaN нельзя, это всегда false - по определению :)

Посмотрите на функцию isnan, или, как вариант - поскольку сравнение NaN всегда ложно - можно проверять вот так:

bool is_nan(double x) { return x != x; }

Только учтите, что не все компиляторы это все поддерживают (насколько я помню, Watcom что-то не так считал... но не помню, что) и второе - такая проверка - это говорит скорее о некорректности самого алгоритма...

READ ALSO
Не открыть файл boost_thread-vc141-mt-gd-x32-1_66.lib

Не открыть файл boost_thread-vc141-mt-gd-x32-1_66.lib

Подключил буст, всё ок, но потом компилятор начал выдвать ошибку:

145
Общий элемент двух массивов

Общий элемент двух массивов

Имеется два массива (вектора, разницы нет какой контейнер использовать) нужно найти два элемента, которые есть и в первом и во второмКроме...

118
Создать exe-файл в Linux с использованием cmake

Создать exe-файл в Linux с использованием cmake

Необходимо под Linux системой (Ubuntu 17) собрать проект с использованием cmake

154
В чем ошибка: при вводе или выводе?

В чем ошибка: при вводе или выводе?

Почему при вводе 11 фамилий выводится только 10 фамилий?

145