作者YolandaQueen (Yolanda)
看板C_and_CPP
标题[语法] if判断条件与double的(新手)问题
时间Sun May 3 18:33:43 2009
最近初学程式,有些问题百思不得其解,
还请大大们解惑,谢谢。
(1) 请问 if 判断条件放运算式或是资料型态上是不是有所限制?
以下面两个程式码为例,
第一个程式码即使 multi 与 pow(n,((double)num)/2) 相等也会印出不相等
但是在第二个程式码用另一个变数暂存 pow(n,((double)num)/2) 运算结果,
就可以印出相等结果,请问这是什麽原因呢?
第一个程式码:
if(
multi == pow(n,((double)num)/2))
printf("相等 \n");
else
printf("不相等 \n");
第二个程式码
double temp = pow(n,((double)num)/2);
if(
multi == temp)
printf("相等 \n");
else
printf("不相等 \n");
PS: multi 型态为 double、num 型态为 int
===============================================================
(2)
double num;
printf("Please enter one number > ");
scanf("%f",&num);
printf("num = %f \n",num);
请问为什麽输入任一非零浮点数,例如 25.123,
印出来的却都是 0.000000 ?
但若将 num 宣告成 float 就没有问题,这到底是什麽原因呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.133.18.7
1F:推 VictorTom:1. double 型态要搭配 %lf 来做scanf和printf才会正确. 05/03 18:37
2F:→ VictorTom:2. 浮点数有精确度的问题, 最好别运算两数直接判段相等. 05/03 18:38
3F:→ VictorTom: 常见的作法是判断两数相减的绝对值小於某个容忍值. 05/03 18:40
4F:→ YolandaQueen:谢谢大大您的解惑。原来是要用%lf阿~ 感谢 ~ 05/03 18:50
5F:→ YolandaQueen:所以判断式的浮点数运算和之外的运算可能会不一罗? 05/03 18:56
6F:推 chrisdar:if(intA==intB) --> if(abs(dblA-dblB)<=DBL_EPSILON) 05/03 19:03