为什么这些括号在 C 中给出不同的答案?
Why do these parentheses give different answers in C?
我正在研究 CS50 PS 2 的可读性,并且在年级水平上得到了不正确的输出。
调试显示输入值正确,但输出错误。使用输入的手工计算给出了正确的答案。
我简化了等式的第一部分并发现:
对L
使用214
的值,对W
使用56
的值,表达式:
float R = (0.0588 * (L / W) * 100);
输出17.64
,这是错误的。
当我使用:
float R = (0.0588 * L / W * 100);
它输出22.47
,这是正确的。
我不明白为什么。
很有可能 L
和 W
都声明为 int
。那么在第一种情况下,(L/W)
也将被视为一个 int
,因此被 floored,从而导致错误。
旁注:即使它们被声明为 float
或 double
,浮点运算也意味着乘法和除法不是关联的。
表达式
float R = (0.0588 * (L / W) * 100);
会发展到
float R = 0,0588 * 3 * 100;
这是 17.64
,四舍五入到小数点后两位。
L / W
integer division 的结果是 int
,因此结果 3.8...
将被截断为 3
。
要更正此问题,变量 W
或 L
中至少有一个必须是 float
或 double
类型。
表达式
float R = (0.0588 * L / W * 100);
会发展到
float R = ((0,0588 * 214) / 24) * 100 //parenthesis to illustrate the sequence
四舍五入到小数点后两位时输出正确的结果22.47
。
我正在研究 CS50 PS 2 的可读性,并且在年级水平上得到了不正确的输出。
调试显示输入值正确,但输出错误。使用输入的手工计算给出了正确的答案。
我简化了等式的第一部分并发现:
对L
使用214
的值,对W
使用56
的值,表达式:
float R = (0.0588 * (L / W) * 100);
输出17.64
,这是错误的。
当我使用:
float R = (0.0588 * L / W * 100);
它输出22.47
,这是正确的。
我不明白为什么。
很有可能 L
和 W
都声明为 int
。那么在第一种情况下,(L/W)
也将被视为一个 int
,因此被 floored,从而导致错误。
旁注:即使它们被声明为 float
或 double
,浮点运算也意味着乘法和除法不是关联的。
表达式
float R = (0.0588 * (L / W) * 100);
会发展到
float R = 0,0588 * 3 * 100;
这是 17.64
,四舍五入到小数点后两位。
L / W
integer division 的结果是 int
,因此结果 3.8...
将被截断为 3
。
要更正此问题,变量 W
或 L
中至少有一个必须是 float
或 double
类型。
表达式
float R = (0.0588 * L / W * 100);
会发展到
float R = ((0,0588 * 214) / 24) * 100 //parenthesis to illustrate the sequence
四舍五入到小数点后两位时输出正确的结果22.47
。