【问题标题】:Dividing float by int and storing as float - Division by zero将浮点数除以 int 并存储为浮点数 - 除以零
【发布时间】:2015-01-08 18:37:13
【问题描述】:

我有以下一段代码,它不想将声明为 float 的 up 与声明为 int 的 down 分开。我尝试将down 转换为浮点数,但这也不起作用。 我得到的输出是inf的10倍。

int main(void) {
    float x = 0.1, y = 0.0;

    for (int n = 0; n < 10; n++) {
        float up = exp(x, n);
        int down = fac(n);

        y = up / down;

        printf("%f\n", y);

        x += 0.1;
    }

    return 0;
}

谁能帮我找出这段代码中的(巨大)错误? exp(x,n) 和 fac(n) 都将正确的值类型返回给 up 和 down。

这是exp和fac这两个函数

float exp(float x, int n) {
    float power = 1;

    for (int i = 0; i < n; i++) {
        power *= x;
    }
    return power;
}

int fac(int n) {
    int fac = 1;
    for (int i = 0; i <= n; i++) {
        fac *= i;
    }
    return fac;
}

【问题讨论】:

  • 请同时包含这两个函数!还可以尝试将函数的返回值转换为 int 和 float(例如 float up = (float) exp(x, n); int down = (int) fac(n);)这样可以吗?
  • fac() 是做什么的?
  • 并且不要命名自己的函数exp...

标签: c floating-point int division


【解决方案1】:

你除以 0:

int fac = 1;
for (int i = 0; i <= n; i++) {
    fac *= i; /* This will be 0 since you start from i=0. */
}
return fac;

您可能只想从1 开始。

【讨论】:

  • 谢谢。不考虑除以零是多么可怕的错误。现在我确实得到了正确的输出。让我们记住这一点,继续工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-13
  • 1970-01-01
  • 1970-01-01
  • 2012-03-10
相关资源
最近更新 更多