Подтвердить что ты не робот

Различные ответы: два простых одинаковых целочисленных вычисления?

Ниже приведены два сценария, в которых операции кажутся идентичными, но приносят разные результаты на 1. Я не думаю, что мне нужно объяснить программирование, это очень просто.

Сначала объявления переменных, сценарий 1 равен 1) и 2 = 2), а полученные результаты перечислены последними в каждом сценарии.

Любая помощь будет принята с благодарностью.

int intWorkingNumber = 176555;

int intHundreds = 1;

int intPower = 1;

1)

int intDeductionValue = (intHundreds * 100 * pow(1000, intPower));

intWorkingNumber -= intDeductionValue;  

intWorkingNumber = 76555

2)

intWorkingNumber -= (intHundreds * 100 * pow(1000, intPower))

intWorkingNumber = 76554
4b9b3361

Ответ 1

Разница между двумя примерами кода заключается в том, что вы передаете int.

Первая версия похожа на этот код, где вы отбрасываете целое число до вычитания:

intWorkingNumber = 176555 - (int)(1 * 100 * pow(1000, 1));

Вторая версия похожа на эту, где вы отбрасываете целое число после вычитания:

intWorkingNumber = (int)(176555 - (1 * 100 * pow(1000, 1)));

Функция pow возвращает число с плавающей запятой. Если результат 1 * 100 * pow(1000, 1) не точно равен 100000.0000 (и с операциями с плавающей запятой, вы не должны обычно полагаться на точные результаты), эти два не эквивалентны.

Рассмотрим этот более простой пример:

x = 10 - (int)0.001;   // x = 10 - 0;     => x = 10
y = (int)(10 - 0.001); // y = (int)9.999; => y = 9