что я должен изменить в моей функции, чтобы он рассчитывал реальные цифры? - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь написать функцию, которая постоянно добавляет 0,001 к 't', а затем вставляет ее в 'y', пока 't' не достигнет 0,3, однако числа получаются неправильными, но я заметил, что если я изменю float на int и измените числа на integer, функция fuction работает ... что я должен изменить, чтобы функция работала правильно

#include <stdio.h>
#include <math.h>

void main(void)
{
    float t,y,dt;

    dt = 0.001;
    y = 1;
    t = 0;

    while (t <= 0.3)
    {
        y = y + dt*(sin(y)+(t)*(t)*(t));
        t = t + dt;
    }

    printf("y is %d when t is 0.3\n" , y);
    return 0;
}

1 Ответ

1 голос
/ 21 марта 2019

я заметил, что если я изменяю float на int и меняю числа на целые, функция fuction работает ... что я должен изменить, чтобы функция работала правильно

, как сказано впримечание: проблема в том, как вы (пытаетесь) напечатать значение в

printf("y is %d when t is 0.3\n" , y);

%d предположим, что соответствующий аргумент является int и напечатает егокак int , но y является float .Обратите внимание, что в этом случае преобразование из float в int не происходит, поскольку аргументы управляются через varargs

, просто выполните

 printf("y is %f when t is 0.3\n" , y);

Также измените

void main(void)

на

int main()

После изменений, компиляции и выполнения:

/tmp % gcc -pedantic -Wall -Wextra f.c -lm
/tmp % ./a.out
y is 1.273792 when t is 0.3

Обратите внимание, что все вычисления выполняются в double , поэтому лучше заменить float на double , чтобы ввести ваши переменные


(правка) Компиляция исходного кода с помощью gcc и опция -Wall сигнализируют о ваших проблемах:

/tmp % gcc -Wall f.c -lm
f.c:4: warning: return type of 'main' is not 'int'
f.c: In function 'main':
f.c:18: warning: format '%d' expects type 'int', but argument 2 has type 'double'
f.c:19: warning: 'return' with a value, in function returning void

Лучше всего использовать -Wall и -Wextra

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...