Folks,Сравнение двойников в Visual Studio - стандартный способ поймать это?
Даже опытные программисты пишут C# код, как это иногда:
double x = 2.5;
double y = 3;
if (x + 0.5 == 3) {
// this will never be executed
}
В основном, это общеизвестно, что два двухместных (или поплавки) никогда не может быть точно равны друг другу, из-за пути компьютер обрабатывает арифметику с плавающей запятой.
Проблема в том, что все знают об этом, но такой код по-прежнему повсюду. Это так просто пропустить.
Вопросы для Вас:
- Как вы справляетесь с этим в организации развития?
- Является ли такая распространенная вещь, что компилятор должен проверять, что все мы должны кричать действительно громко для VS2010, чтобы включить предупреждение о компиляции, если кто-то сравнивает два удваивания/поплавки?
ОБНОВЛЕНИЕ: Люди, спасибо за комментарии. Я хочу пояснить, что я, безусловно, понимаю, что приведенный выше код неверен. Да, вы никогда не хотите, чтобы == сравнить парные и плавающие. Вместо этого вы должны использовать сравнение на основе epsilon. Это очевидно. Реальный вопрос здесь: «Как вы определяете проблему», а не «как вы решаете техническую проблему».
Вы выбрали * другой * плохой пример. Опять же, это всегда будет выполнено. Я предлагаю, чтобы при выборе следующего примера вы попробовали его перед отправкой ... –
(И вы можете удалить ошибочное утверждение о том, что «два двойника никогда не могут быть точно равны друг другу». Если вы собираетесь утверждают, что что-то является «общим знанием» и утверждают, что вы действительно * понимаете все это, стоило бы дважды проверить все, что вы пишете, чтобы убедиться, что это точно. –
Действительно, если числа с плавающей запятой НИКОГДА не были бы точно равными, вероятно, было бы проще, потому что все разработчики знали бы о проблеме. –