Математические функции не требуются для установки errno
. Они могут , но они не обязаны. См. раздел 7.12.1 стандарта C . Теоретически вы можете проверить значение глобальной константы math_errhandling
, чтобы выяснить, будут ли они, но это не совсем надежно для любой реализации, о которой я знаю, и может даже не быть определено (это макрос, так что вы можете по крайней мере использовать #ifdef
проверить это).
Вместо этого вы можете проверить, является ли вход отрицательным перед вызовом sqrt
, или (если ваша реализация должным образом поддерживает IEEE 754), вы можете проверить, является ли вывод NaN (используя isnan
) впоследствии.