Наибольшее значение с плавающей запятой, которое можно возвести в квадрат

У меня есть функция, которая принимает необязательный параметр расстояния dist, но мой алгоритм работает с квадратами расстояний. Если пользователь не указывает никакого значения, я хочу, чтобы dist было как можно большим числом.

Result foo(double dist = std::sqrt(std::numeric_limits<double>::max())) const;

Безопасен ли приведенный выше код или он взорвется из-за ошибок округления? Было бы лучше использовать что-то (даже) более уродливое, например

Result foo(double dist = std::sqrt(std::numeric_limits<double>::max() - 100)) const;

person Touloudou    schedule 30.10.2020    source источник
comment
Не уверен, что ваш алгоритм сможет с ним работать, но почему бы и нет std::numeric_limits<double>::infinity ? Он вернет, что оно больше, чем любое число в сравнении, и оно не станет хуже, когда вы возведете его в квадрат.   -  person dratenik    schedule 30.10.2020
comment
о, я не знал, что могу возвести в квадрат std::numeric_limits<double::infinity. Это именно то, что мне нужно тогда. Спасибо!   -  person Touloudou    schedule 30.10.2020
comment
Тогда давайте ответим.   -  person dratenik    schedule 30.10.2020
comment
Насчет «Он вернет, что оно больше любого числа при сравнении»: ∞ — это число с плавающей запятой, и оно не больше самого себя.   -  person Eric Postpischil    schedule 30.10.2020


Ответы (1)


Если вы будете осторожны, вы можете использовать std::numeric_limits<double>::infinity . Это будет правильно в сравнении, и если вы возведете его в квадрат, оно останется бесконечным.

person dratenik    schedule 30.10.2020