(x) != (x)
будет истинным, если x
является IEEE 754 Not-a-number (NaN) .Т.е. этот макрос пытается привести результат к 0.0 для значений аргументов, для которых квадратный корень не определен.Справочная страница sqrt (3) Linux хорошо суммирует возвращаемые значения:
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
В случае успеха эти функции возвращаютквадратный корень из x.
Если x
является NaN, возвращается NaN.
Если x
равно +0 (-0), возвращается +0 (-0).
Если x
- положительная бесконечность, возвращается положительная бесконечность.
Если x
меньше -0, возникает ошибка домена и возвращается NaN.
Следовательно, это выражение гарантирует, что вместо NaN будет возвращено 0для 1-го и 4-го случаев, кроме того, errno
не трогать, и исключение с плавающей запятой не произойдет.
(Кстати, этот странный макрос небезопасен для использования, если у вас есть побочные эффекты варгумент макроса, поэтому его лучше заменить встроенной функцией или аналогичной)