2014-10-12 9 views
1

Я хочу проверить, приводит ли операция на комплексном числе (std :: complex) результат +/- INF или NAN. (Не сходящийся результат.)C++ std :: complex <> тест типа данных для NAN, INF (не сходимость)

Например, при отображении z -> z * z + c.

Для плавающих или двойных типов данных, я считаю, что для проверки NAN можно использовать x! = X. Я не уверен, что это работает для +/- INF.

+0

Что-то вдоль строк 'z.abs()> std :: numeric_limits :: max()', возможно? –

+0

@IgorTandetnik Будет ли эта работа или это догадка? (Полезно в любом случае, но хотелось бы быть более уверенным.) – user3728501

+0

Я уверен, что он должен работать, но я не пробовал. –

ответ

2

Использование std::isfinite. Эта функция возвращает true, если ее вход не равен nan, а не inf. Вы также можете использовать std::isnan и std::isinf для проверки этих конкретных свойств.

РЕДАКТИРОВАТЬ: Для std::complex, вы можете применить те же проверки на real и imag частях. Вы также можете просто применить его на abs объекта std::complex.

+0

Что можно сказать о std :: complex? – user3728501

+0

Может быть, можно передать модуль комплексного номера? – user3728501

+0

@ user3728501 Да, 'abs' был бы самым безопасным. Если вам нужно нажать его немного больше , вы uld останавливается с проверками на 'real' и' imag' вместо. – Pradhan

0

Не используйте этот тест:

std::abs(z) > std::numeric_limits<double>::max() 

Это будет не в состоянии обнаружить определенные конечные комплексные числа, такие как complex<double>(DBL_MAX, DBL_MAX). Сравнение также потерпит неудачу в случае, когда z имеет компонент NaN.

std::isfinite не кажется, имеют сложную перегрузку, поэтому вы не можете использовать этот тест:

isfinite(z) 

Вы можете использовать этот тест:

z - z != complex<double>(0) 

Если z имеет две конечные компоненты, то z - z имеет две нулевые компоненты и будет сравниваться с 0. Если z имеет по меньшей мере одну бесконечную или NaN-составляющую, то этот компонент z - z будет NaN. NaN сравнивает != со всем, включая 0 и себя.

 Смежные вопросы

  • Нет связанных вопросов^_^