【问题标题】:Dividing 1/n always returns 0.0 [duplicate]除以 1/n 总是返回 0.0 [重复]
【发布时间】:2012-11-11 12:19:29
【问题描述】:

我正在尝试计算p1=(1/1)*(1/2)*...*(1/n),但出了点问题,printf 给了我0.000...0

#include <stdio.h>

int main(void) {

    int i,num;
    float p3;

    do {
        printf ("give number N>3 : \n" );
        scanf( "%d", &num );
    } while( num <= 3 );

    i = 1;
    p3 = 1;  

    do {
        p3=p3*(1/i);
        printf( "%f\n",p3 );
    } while ( i <= num );

    printf("\nP3=%f",p3);
    return 0;
}

【问题讨论】:

  • p3*(1/i)中的除法是整数除法。请改用p3 * (1.0 / i)。哦...并使用double 而不是float 作为您的浮点数。
  • 第二个循环不是无限的吗?它等待在inum 上满足条件,但它不会改变其中任何一个。
  • 对不起,我没有复制整个代码
  • 改用p3 /= i; 怎么样? ;-)

标签: c floating-point integer floating-point-conversion


【解决方案1】:
(1/i)

i 是一个int,所以这是整数除法,如果i &gt; 1 则为0。使用1.0/i进行浮点除法。

【讨论】:

    【解决方案2】:

    1 是一个整数,i 是一个整数。所以1/i 将是一个整数,ie 结果将被截断。要执行浮点除法,其中一个操作数应为 float 类型(或者更好的是 double 类型):

    p3 *= 1. / i;
    

    【讨论】:

    • 为什么要加倍而不是浮点数?
    • @user1809300 它具有更高的精度。
    【解决方案3】:

    我遇到了同样的问题。基本情况:

    • 当你想从两个整数中得到浮点输出时,你需要将一个转换为浮点数

      int c = 15; int b = 8; printf("result is float %f\n", c / (float) b); // result is float 1.875000 printf("result is float %f\n", (float) c / b); // result is float 1.875000

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-16
      • 2018-05-20
      • 1970-01-01
      • 2018-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多