Так вот мой кодПочему я получаю два разных выхода в c, когда я использую int или double?
double blocksize = 32;
double indexSize, tagSize, offsetSize;
int main(int argc, char** argv) {
double index;
double cachesize = 1;
offsetSize = log(blocksize)/log(2.0);
index = cachesize/blocksize * 1024;
indexSize = (log(index)/log(2.0));
tagSize = 32 - indexSize - offsetSize;
printf("Offset : %f\n", offsetSize);
printf("Index: %f\n", index);
printf("Index : %f\n", indexSize);
printf("Tag : %f\n", tagSize);
return (EXIT_SUCCESS);
}
Таким образом, проблема в том, что, когда я задаю все в целое, я получаю этот выход:
Offset: 5
индекс: 0
Index : -2147483648
Метка: -2147483621
Однако, когда я задаю все как двойной я получаю этот выход:
Offset: 5,000000
индекс: 32,000000
индекс: 5,000000
Тэг: 22,000000
Почему я Я получаю два разных результата? Я думал, что единственная разница между double и int заключается в том, что int - целое число, а double - не целое число. Он будет возвращаться как результат, похожий на то, что я получил 5.000000, 32.0000 и т. Д. Так почему я получаю два разных выхода?
'/b' с целыми числами также будет целочисленным делением, т. е. 2/3 => 0. – Thilo
Когда вы используете ints в арифметических операциях, результаты усекаются до ints в каждой точке. Например, '10/20 * 20' -' 0', но '10.0/20.0 * 20.0' -' 10.0'. –