作业帮 > 综合 > 作业

买 A种票的有多少人?这题应有答案,A种票为30人,但为什么运行这个程序没有输出结果呢?

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/07/31 21:34:03
买 A种票的有多少人?这题应有答案,A种票为30人,但为什么运行这个程序没有输出结果呢?
一辆汽车共载客 50人,其中一部分人买 A种票,每张 0.80元;另一部分人买 B种票,每张 0.30元.售票员最后统计出:所卖的 A种票比卖 B种票多收入 18元.
买 A种票的有多少人?这题应有答案,A种票为30人,但为什么运行这个程序没有输出结果呢?
楼主,这个程序原理上是行的通的,但是,在实际运算过程中,会有少少问题,那就是浮点数的比较问题.即是算术上,来说,如果 0.8*a == 0.3*b+18是正确的,但在浮点数比较过程中却不一定.比如一个浮点数 f = 1.0,但在计算机内存中,可能是 1.0000000001或者0.99999999之类的(跟精度有关).
所以,这个题目中,0.8*a == 0.3*b+18可能会因为浮点数运算结果出来不等(尤其是在精度比较低的机器上运行),在精度较高的机器上出错的概率会低一些.
所以建议这种问题,最好是用int进行运算而不要用浮点运算.如判断条件改为
if (8 * a == 3 * b + 18 * 10)
如果非要使用浮点数比较,那最好设定一个精度范围进行比较,如
double xa = 0.8 *a;
double xb = 0.3 * b + 18;
if (xa - 0.0000001 < xb && xa + 0.0000001 > xb) // 认为 xa == xb;其中0.0000001决定于你需要的精度范围.