Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 当我得到(j>;1)作为条件时,为什么得到1作为答案? #包括 #包括 #包括 double rand_double(){ 返回(((双)rand())/((双)rand_MAX)); } int main(){ 双i=rand_double(); 双j; 做{ i=(i*0.5); j=(1+i); printf(“%lf\n”,j); } 而(j>1); 返回(0); }_C - Fatal编程技术网

C 当我得到(j>;1)作为条件时,为什么得到1作为答案? #包括 #包括 #包括 double rand_double(){ 返回(((双)rand())/((双)rand_MAX)); } int main(){ 双i=rand_double(); 双j; 做{ i=(i*0.5); j=(1+i); printf(“%lf\n”,j); } 而(j>1); 返回(0); }

C 当我得到(j>;1)作为条件时,为什么得到1作为答案? #包括 #包括 #包括 double rand_double(){ 返回(((双)rand())/((双)rand_MAX)); } int main(){ 双i=rand_double(); 双j; 做{ i=(i*0.5); j=(1+i); printf(“%lf\n”,j); } 而(j>1); 返回(0); },c,C,原因是您没有显示足够的小数位数 因此输出了1.000000,例如,值为1.000000000000000 22,即>1 请尝试使用更多小数位: #include <stdio.h> #include <stdint.h> #include <stdlib.h> double rand_double() { return ( ((double)rand())/ ((double)RAND_MAX) ); } int main(){ doubl

原因是您没有显示足够的小数位数

因此输出了
1.000000
,例如,值为
1.000000000000000 22
,即
>1

请尝试使用更多小数位:

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>

double rand_double() {
    return ( ((double)rand())/ ((double)RAND_MAX) );
}

int main(){
    double i=rand_double();
    double j;
    do {
        i=(i*0.5);
        j=(1+i);
        printf("%lf\n", j);
    }
    while(j>1);
    return(0);
}
默认的位置数通常为6。
double
类型适用于大约16-17位有效数字。修改后的程序输出:

printf("%.17lf\n", j);

@这不是一个问题,因为
j
在被读取之前就已经被设置好了。最终的数字是
1
,这让你有什么惊讶
1>1
为false,因此循环停止。正如在另一条注释中所暗示的,
1.0000000000001
大于
1
@Aplet123 Oops,我读到的是
j=(1+j)
double
的格式是
%f
。如果您使用
“%lf”
,则会忽略
l
(因此它是无害的),但我认为早期版本的语言并非如此。(
long-double
使用
%Lf
1.00062562944425792
1.00031281472212896
1.00015640736106448
1.00007820368053224
1.00003910184026612
1.00001955092013306
1.00000977546006653
1.00000488773003338
1.00000244386501658
1.00000122193250829
1.00000061096625426
1.00000030548312702
1.00000015274156362
1.00000007637078170
1.00000003818539085
1.00000001909269542
1.00000000954634771
1.00000000477317386
1.00000000238658693
1.00000000119329346
1.00000000059664673
1.00000000029832337
1.00000000014916179
1.00000000007458079
1.00000000003729039
1.00000000001864531
1.00000000000932254
1.00000000000466138
1.00000000000233058
1.00000000000116529
1.00000000000058265
1.00000000000029132
1.00000000000014566
1.00000000000007283
1.00000000000003642
1.00000000000001821
1.00000000000000910
1.00000000000000466
1.00000000000000222
1.00000000000000111
1.00000000000000067
1.00000000000000022
1.00000000000000022
1.00000000000000000