Проверка переменной на null
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
float a, b, h;
ofstream ofile;
float f(float x){
try{
return log(sqrt(3.0*x-1.0))/x/cos(x+2.0);
}
catch(...){
return NULL;
}
}
void print(){
ofile.open("out.txt", ios_base::out);
ll cnt=0;
cout << "Undefined x:\n";
for(float i=a; i<=b; i+=h){
float y=f(i);
if(y==NULL) cout << i << '\n';
ofile << i << " " << y << "\n";
++cnt;
}
cout << "\nDots number - " << cnt << "\n";
ofile.close();
}
int main(){
cin >> a >> b >> h;
print();
return 0;
}
При выполнении программы не выполняется условие y==NULL, хотя должно. В чём проблема?
Ответы (1 шт):
Смешались в кучу кони, люди...
NULL, приведенный к float — это просто нуль. 0.0f.
При неверном аргументе, переполнении и т.п. исключения C++ не генерируются.
Если уж вы хотите исключений, то они должны перехватываться вместо if(y==NULL) — а так вы просто хотите превратить С++ в С.
Если уж вы хотите проверить, что вернулось — то проверяйте возвращенное значение с помощью функции isnan() после возврата (а можно еще и isinf(), но лучше просто isnormal()), а если хотите исключения — то проверяйте в самой функции и генерируйте исключение в случае, если возникли проблемы.
P.S. Загляните по поводу обработки математических ошибок сюда. Это, пожалуй, самый корректный вариант...