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