Я закодировал некоторые вычисления (я скопировал ниже действительно упрощенный пример того, что я сделал), например CASE2, и получил плохие результаты. Рефакторинг кода как CASE1 и работал нормально. Я знаю, что в СЛУЧАЕ 2 есть неявное приведение, но не уверен в полной причине. Кто-нибудь может объяснить мне, что именно происходит ниже?
//CASE 1, result 5.5
double auxMedia = (5 + 6);
auxMedia = auxMedia / 2;
//CASE 2, result 5.0
double auxMedia1 = (5 + 6) / 2;
//CASE 3, result 5.5
double auxMedia3 = (5.0 + 6.0) / 2.0;
//CASE 4, result 5.5
double auxMedia4 = (5 + 6) / 2.0;
Я предполагаю, что /2 в CASE2 приводит (5 + 6) к int и приводит к раунду деления до 5, затем снова приводится к удвоению и преобразуется в 5.0.
CASE3 и CASE 4 также устраняют проблему.
/2
в случае 1. Все остальное делает компилятор. - person Marc Gravell   schedule 31.03.2010auxMedia
является локальным и назначается константой? Или это оптимизация, которую строго выполняет JIT? - person Michael Burr   schedule 31.03.2010