NaN как особый аргумент

Я пишу небольшую библиотеку, где вы можете установить диапазон; Начальная и конечная точки являются двойными. В библиотеке есть некоторые встроенные или рассчитанные значения по умолчанию для этого диапазона, но как только они установлены функцией настройки диапазона, возврат к значению по умолчанию невозможен.

Поэтому мне нравится использовать значение NaN в качестве индикатора для использования значения по умолчанию, но я не нашел никакого стандартного определения NaN, и, читая руководство по gcc, он говорит, что есть платформы, которые не поддерживают NaN,

Мои вопросы:

Существуют ли в последнее время платформы, которые не используют числа IEEE 754 с плавающей запятой? Меня не волнуют некоторые скрытые встраиваемые устройства, потому что библиотека ориентирована на платформы с графическим интерфейсом, чтобы быть точным Каиром.

И второй вопрос: вы бы использовали значение NaN в качестве аргумента для такой цели? У меня нет проблем с определением его где-то в шапке.

3 ответа

Решение

NaN не равен ни одному числу, даже самому себе. Следовательно, использование его в качестве индикатора приведет к запутанному коду или даже ошибкам. Я бы не использовал это таким образом.

Я бы не стал использовать NaN для этой цели - помимо вопроса о том, какой именно NaN использовать (а их много), было бы лучше добавить API вызова функции для сброса к значениям по умолчанию.

С NaN довольно странно иметь дело в коде, и я, конечно, не хотел бы, чтобы библиотека использовала их цели, для которых они не созданы.

Изменить: Другая проблема, о которой я только что подумал, заключается в том, что если в результате вычисления получается NaN, и оно передается в качестве аргумента, вы получите непреднамеренное поведение. Например:

MyFunc(SomeCalculation()); //if SomeCalculation() is assumed to not be NaN,
                           //this will cause unintended behavior
Другие вопросы по тегам