У Степанова в его лекциях по программированию мимоходом рассказывается о проблеме, которую привносит в template algorithm'ы STL'я и в обобщённое программирование на C++, требование IEEE стандарта к наличию специального значения в диапазонах double/float( NaN - Not a Number).
Подробности можно прочитать в Notes from the lectures of Programming by Alexandr Stepanov, но суть проблемы следующая:
Любая операция сравнения, которая выполняется с NaN, должна возвращать false. Такое требование закладывает мину практически во все алгоритмы из библиотеки STL, которые опираются на операции сравнения.
Степанов заявляет, что так как это случай редкий и касается только 1 типа, то можно его проигнорировать. Но здесь на сцену выходят Фаулер и Кириевски с их идеей рефакторинга "Introduce Null Object", и мы по сути получаем проблему, которую Степанов считал малозначащей, только перенесённую уже и в другие языки программирования, а не только на C++.
Дальше чуть более подробно мои размышления на эту тему...
Подробности можно прочитать в Notes from the lectures of Programming by Alexandr Stepanov, но суть проблемы следующая:
Любая операция сравнения, которая выполняется с NaN, должна возвращать false. Такое требование закладывает мину практически во все алгоритмы из библиотеки STL, которые опираются на операции сравнения.
Степанов заявляет, что так как это случай редкий и касается только 1 типа, то можно его проигнорировать. Но здесь на сцену выходят Фаулер и Кириевски с их идеей рефакторинга "Introduce Null Object", и мы по сути получаем проблему, которую Степанов считал малозначащей, только перенесённую уже и в другие языки программирования, а не только на C++.
Дальше чуть более подробно мои размышления на эту тему...