Почему мой результат меняется, если я выполняю деление с помощью макроса и локальной переменной? - PullRequest
0 голосов
/ 04 мая 2019

Я работал над кодом Си. Я объявил несколько констант, используя #define. Однако я заметил, что, хотя я делаю локальную переменную с константой (определенной с помощью #define), я численно получаю неправильный ответ.

Я попытался изменить определенную константу (используя #define) на локальную переменную и затем выполнить деление. Теперь я получаю правильный ответ.

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

Это результаты, которые я получаю при использовании #define «0.106883 - это q2, 11.575652 - это D2, 0.000004 - это q2 / D2»

Это результаты, которые я получаю при использовании в качестве локальной переменной. «0,106883 - это q2, 11,575652 - это D2, 0,009233 - это Q2 / D2»

Я использую GCC 8.3.0_2. Это более простая версия моей проблемы.

#include <stdio.h>
#include<stdlib.h>
#define D2 (h2()*2)/(50)
double h2(void);

int main(){
 double q2 = 0.106883;
 printf("%f is q2, %f is D2 ,%f is q2/D2\n",q2,D2,q2/D2);

}
double h2(void){
 return(289.391293);
}

1 Ответ

2 голосов
/ 04 мая 2019

Используя #define ваше выражение на самом деле q2/(h2()*2)/50, а не q2/((h2()*2)/50).Вам нужно заключить в скобки #define, т. Е. Макросы #define D2 ((h2()*2)/50)

в основном являются текстовой заменой.В качестве другого примера:

#define a 1+2
int b = 3*a   // 3*1+2 = 5
int c = 3*(a) // 3*(1+2) = 9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...