Когда Вы попытаетесь посмотреть на это на уровне "шаблонов разработки" (в целом) и "FP по сравнению с ООП", ответы, которые Вы найдете, будут темны в лучшем случае
Идут уровень глубже на обеих осях, тем не менее, и рассматривают определенные шаблоны разработки и , определенные функции языка и вещи становятся более ясными.
Так, например, некоторые определенные шаблоны, как Посетитель , Команда Стратегии , , и Наблюдатель определенно изменение или исчезают при использовании языка с [1 112] алгебраические типы данных и сопоставление с образцом , закрытия , функции первого класса , и т.д. Некоторые другие шаблоны из книги GoF все еще 'слоняются поблизости', все же.
В целом, я сказал бы, что со временем определенные шаблоны устраняются новым (или просто повышение в популярности) функции языка. Это - естественный ход дизайна языка; поскольку языки становятся более высокоуровневыми, абстракции, которые могли ранее только быть вызваны в книге с помощью примеров теперь, становятся приложениями конкретной функции языка или библиотеки.
(В стороне: вот недавний блог , который я записал, который имеет другие ссылки на большее количество обсуждения FP и шаблонов разработки.)
Единственное, о чем я могу думать, это, возможно, вы связываетесь с библиотекой или DLL, которые изменили точность процессора через управляющее слово.
Вы пробовали вызвать _fpreset ()
из float.h
перед проблемным вычислением?
Да, конечно, усечение до плавающих. Я получаю то же значение, напечатанное float f = 0,4
, как и в случае "неточного". Попробуйте:
double b = 0.0 + (double) 0.4;
Тогда возникает вопрос, почему он усекается до числа с плавающей точкой. В стандарте нет оправдания трактовке 0,0 + 0,4
как выражения с одинарной точностью, поскольку литералы с плавающей запятой имеют двойную точность, если только у них нет суффикса, указывающего иное.
Так что что-то должно мешать ваши настройки, но я понятия не имею, какие.