为什么C语言中这些括号给出的答案不一样?

问题描述 投票:0回答:2

我在研究CS50 PS 2的可读性,在等级上得到的输出不正确。

调试后发现输入值是正确的,但输出是错误的。用输入值手工计算,得到了正确的答案。

我简化了公式的第一部分,发现是这样的。

用以下的数值 214 对于 L56 对于 W,表达式。

float R = (0.0588 * (L / W) * 100);

输出 17.64,这是错误的。

当我使用:

float R = (0.0588 * L / W * 100);

它的输出是 22.47,这是正确的。

我想不通为什么。

c parentheses arithmetic-expressions
2个回答
4
投票

的表达式

float R = (0.0588 * (L / W) * 100);

将发展到

float R = 0,0588 * 3 * 100;

也就是 17.64,当四舍五入到小数点后两位时。

的结果是 L / W 整数除法 是一个 int因此,结果是 3.8... 将被截断为 3.

为了纠正这种情况,至少要有一个变数 WL 必须是 floatdouble.

表达式

float R = (0.0588 * L / W * 100);

将发展到

float R = ((0,0588 * 214) / 24) * 100 //parenthesis to illustrate the sequence 

其中输出正确的结果。22.47,当四舍五入到小数点后两位时。


3
投票

很有可能两个 LW 被宣布为 int. 那么在第一种情况下: (L/W) 也将被视为 int,因此被浮动,从而导致错误。

附注:即使它们被声明为 floatdouble,浮点算术意味着乘除法不是关联的。

© www.soinside.com 2019 - 2024. All rights reserved.