2010-05-26 2 views
0

Я не совсем уверен, почему я не могу сделатьАрифметические операторы и функции, требующие в C

double a = (double) my_Function(45)/2048/2340/90; 
printf("%.4f",a); // prints out 0.00 

Но вместо этого я должен использовать еще одну переменную:

double a = (double) my_Function(45); 
double b = a/2048/2340/90; 
printf("%.4f",b); // prints out the correct value 
+0

Почему вы выбрали 'float' вместо' double'? И второй бросок в вашем втором ответе ничего не делает. – Phil

+0

должно быть исправлено. –

+0

Могу ли я спросить, почему вы жестко кодируете эти, казалось бы, магические числа 2048, 2340 и 90? Возможно, вы можете '#define MAGIC (2048 * 2340 * 90)' или 'const int MAGIC = 2048 * 2340 * 90' и просто' ((double) my_Function (45))/MAGIC', чтобы упростить будущее. Или, если они должны быть отдельными константами, вы все равно можете использовать эту технику, чтобы дать им имена, которые помогают другим понять, что делает код. –

ответ

-1

Он нисходит к порядку операций.

Вы в основном делают это в первой строке

double a = (double)(my_Function(45)/2048/2340/90); 
+1

+1, но вы, вероятно, должны упомянуть исправленную версию: '((double) my_Function (45))/2048/2340/90' –

+0

Замечательно знать это! Спасибо –

+3

Тип имеет более высокий приоритет, чем любой из арифметических операторов. –

1

Что делает My_function вернуться? Возможно, ваш ответ меньше 10^(- 4).

+0

На самом деле это был вопрос порядка операций, но спасибо в любом случае! –

+3

@Robert Dalton: В обоих случаях заказ одинаков, поэтому нет, это не вопрос порядка операций. – AnT

+0

@ Robert: Я запустил ваш код в своей тестовой проге. Это не имело значения для порядка операций. Если ответ слишком мал (<10^(- 4)), вы получите вывод 0.0000. Это не круто. – Anthony