Проверка переменной на null

Рейтинг: -1Ответов: 1Опубликовано: 08.03.2023
#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, хотя должно. В чём проблема?

Ответы

▲ 3

Смешались в кучу кони, люди...

NULL, приведенный к float — это просто нуль. 0.0f.

При неверном аргументе, переполнении и т.п. исключения C++ не генерируются.

Если уж вы хотите исключений, то они должны перехватываться вместо if(y==NULL) — а так вы просто хотите превратить С++ в С.

Если уж вы хотите проверить, что вернулось — то проверяйте возвращенное значение с помощью функции isnan() после возврата (а можно еще и isinf(), но лучше просто isnormal()), а если хотите исключения — то проверяйте в самой функции и генерируйте исключение в случае, если возникли проблемы.

P.S. Загляните по поводу обработки математических ошибок сюда. Это, пожалуй, самый корректный вариант...