0 против 0,0 в условных выражениях - PullRequest
0 голосов
/ 31 января 2012

Есть ли разница между:

double dandouble = 5.23493; //or some other random number

if (dandouble < 0.0)
    dandouble = 3.5;

и

double dandouble = 5.23493; //or some other random number

if (dandouble < 0)
    dandouble = 3.5;

Или они получатся одинаковыми?

Ответы [ 3 ]

3 голосов
/ 31 января 2012

Компилятор должен выдать инструкцию Opcodes.Clt IL , чтобы выполнить сравнение. Спецификация CLI диктует приемлемые аргументы для инструкции, double и int не допускаются. Зная об этих правилах, компилятор выдвигает аргумент для получения правильной комбинации, double и double - первое совпадение. У него достаточно умов, чтобы признать, что аргумент int является литералом. Так что не генерирует IL для выполнения конвертации, он напрямую генерирует Opcodes.Ldc_R8 для 0.0

Без разницы.

1 голос
/ 31 января 2012
double a = 0.0000000000001;
int b = 0;

res = a <= b; // False
res2 = b >= a; // False

Учитывая вышеупомянутый тест, я бы сказал, что C # выбирает преобразование с наименьшими потерями.(Не предпочтение левой или правой стороны)

Так что, чтобы ответить на ваш вопрос, нет.Разницы нет.

1 голос
/ 31 января 2012

Без разницы.Они одинаковы.

...