想知道这两种代码有何区别

img


我感觉这两种代码功能是相同的,但在做某个问题时第二种能用,第一种就不行了。

我感觉从原理来看确实是一样的,你把第一种num定义为
double看看能否正确解题

我测试了一下代码,唯一能想到的可能是精度问题,我测试了下面的代码没有发现错误,你是哪个情况不行?

#include <stdio.h>

int main()
{
    float num;
    float res = 1.0;
    long st[] = {100000000000, 200000000000, 300000000000000000};
    int i;

    for (i=0;i<3;i++) {
         num = st[i] / 100.0;
         res *= (1 - num);
    }
    printf("res = %f\n", res);

    res = 1.0;
    for (i = 0; i<3;i++)
        res *=(1 - st[i]/100.0);
    printf("res = %f\n", res);
}