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