Jeo = (1 / (1 + десять лет)); не дает мне точного ответа - PullRequest
0 голосов
/ 07 января 2019
int decade;
float jeo;
PRINT("Enter Decade point =\r\n");
scanf("%d",&decade);
print_decimal(decade);
PRINT("\r\n");
jeo=(1/(1+decade));
PRINT("Decade point =");
print_decimal(jeo);//my function for showing floating point number.
PRINT("\r\n");

Я написал этот код во встроенном программном обеспечении IAR для контроллера ARM, но он не дает мне точного ответа, может кто-нибудь сказать мне, почему ?? msgstr "когда я вхожу 3. это дает мне 0 ответ".

Ответы [ 3 ]

0 голосов
/ 07 января 2019

Вы просто выполняете свой расчет с помощью integer и затем присваиваете значение float. Это удалит цифры после десятичной точки.

Попробуйте это:

jeo=(1.0/(1.0+decade));
0 голосов
/ 07 января 2019

Попробуйте это

jeo=1/(1+float(decade));

это потому, что при попытке использовать целое число в логическом выражении, подобном этому, результат вычисляется в целом числе , а затем преобразуется в число с плавающей точкой. Эта процедура, конечно, удаляет цифры после десятичной точки и добавляет искусственные 0.

0 голосов
/ 07 января 2019

Вы присваиваете результат целочисленного деления на jeo. В этом случае, если decade - любое целое число, отличное от 0, результатом целочисленного деления будет 0. (Примечание: если decade равно -1, вы будете иметь неопределенное поведение в результате деления на 0 )

Когда тип после обычных арифметических преобразований является целочисленным типом, результатом является алгебраический коэффициент (не дробь), округленный в направлении, определяемом реализацией (до C99), усеченный до нуля (начиная с C99)

Так что сделайте или числитель, или знаменатель float.

jeo=((float)1/float(1+decade);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...