我应该在函数中进行哪些更改,以便计算实数?

时间:2019-03-21 06:58:59

标签: c floating-point

我正在尝试编写一个函数,将“ t”重复添加0.001,然后将其插入“ y”,直到“ t”达到0.3,但是数字出现错误,但是我注意到,如果我将float更改为int并将数字更改为整数,该函数起作用..我应该更改什么,以便该函数正常工作

#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 个答案:

答案 0 :(得分:1)

  

我注意到,如果我将float更改为int并将数字更改为整数,则该函数起作用了。我应该更改什么,以便该函数正常工作

如评论中所说,问题是您(尝试)在其中打印值的方式

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

%d假设相应的参数是 int 并将其打印为 int ,但是 y 浮动。请注意,在这种情况下,不会从 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 以输入您的变量


(edit)使用 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是更好的选择