C中相同划分的不同结果

C中相同划分的不同结果,c,division,C,Division,我正在用ANSI-C写一个程序 考虑到这些值: static long long int QList[12] = { 0, 2, 6, 30, 210, 2310, 30030, 510510, 9699690, 223092870, 6469693230, 200560490130 }; static long long int phiList[12] = { 0, 1, 2, 8, 48, 480, 5760, 92160, 1658880, 36495360, 1021870080, 30

我正在用ANSI-C写一个程序

考虑到这些值:

static long long int QList[12] = { 0, 2, 6, 30, 210, 2310, 30030, 510510, 9699690, 223092870, 6469693230, 200560490130 };
static long long int phiList[12] = { 0, 1, 2, 8, 48, 480, 5760, 92160, 1658880, 36495360, 1021870080, 30656102400 };
static int hList[12] = { 0, 1, 2, 4, 12, 60, 60, 120, 360, 3960, 27720, 27720 };
我在这样的循环中使用它们:

double alfa;
static double Log2 = log(2.);

for(k=3; k<8; k++){
    alfa = QList[k]/phiList[k]/ hList[k]/ Log2;
    [.........]
}
double-alfa;
静态双对数2=对数(2.);

对于(k=3;k除法是从左到右执行的,因此第一个案例对前两个除法使用整数除法,删除任何余数

您可以强制它一直使用double,方法是将其强制转换为
double

alfa = ((double)QList[k])/phiList[k]/ hList[k]/ Log2;

除法是从左到右执行的,所以您的第一个案例对前两个除法使用整数除法,删除任何余数

您可以强制它一直使用double,方法是将其强制转换为
double

alfa = ((double)QList[k])/phiList[k]/ hList[k]/ Log2;

如果只是前两个部分,就不会有问题,因为例如:
6/2/2=1=>1/log(2)!=0
@duedl0r循环从3开始,因此您的示例永远不会在循环中。如果只是前两个部分,就不会有问题,因为例如:
6/2/2=1=>1/log(2)!=0
@duedl0r循环从3开始,因此您的示例从不在循环中。