gpt4 book ai didi

c++ - 奇怪的除法结果(C++/Xcode)

转载 作者:搜寻专家 更新时间:2023-10-31 01:07:37 24 4
gpt4 key购买 nike

我是新来的,所以如果我做错了什么请原谅我。在发布之前我做了一些搜索,但没有得到任何结果。进入主题:当 AI 代理行为异常时,我遇到了一个错误,所以我起草了一些 printf 来查看发生了什么。

原来是一个简单除法的错误结果:

#define WORLD_HEIGHT 42
#define VIEWPOINT_CONSTANT 9

printf ("%d/%d=%d\n", WORLD_HEIGHT, VIEWPOINT_CONSTANT, WORLD_HEIGHT/VIEWPOINT_CONSTANT);

输出:

42/9=6

然后我做了以下只是为了检查编译器等:

printf ("%d/%d=%d\n", 42, 9, 42/9);

输出:

42/9=4        

不确定这是 Xcode 错误还是 C++ 中的错误(虽然我怀疑是后者,但前者也不太可能)。为了确保我没有遗漏任何东西,我什至将常量本身放在 printf 中。

如果有人知道这个问题可能是什么原因或如何解决它(同时仍然保留 #define 而不是用数字替换它们),那将是非常感谢。

干杯!

最佳答案

我的猜测是你没有向我们展示真实的代码,你实际拥有的是这样的:

#define WORLD_HEIGHT 42
#define VIEWPOINT_CONSTANT 8+1

printf ("%d/%d=%d\n", WORLD_HEIGHT, VIEWPOINT_CONSTANT, WORLD_HEIGHT/VIEWPOINT_CONSTANT);

这将给出您看到的结果,因为 42/8+142/9 不同 - 它被评估为 (42/8 )+1,即 5+1,因此您将获得 6 而不是 4。这可以通过使用括号强制执行所需的评估顺序来解决,即

#define VIEWPOINT_CONSTANT (8+1)

或者更好的是,使用更合适的方法来定义常量而不是预处理器宏,例如

const int WORLD_HEIGHT = 42;
const int VIEWPOINT_CONSTANT = 8+1;

(请注意,问题随着上述声明而消失,不再需要括号。)

我们今天学到的教训:

  • 始终在 #define 中使用圆括号(或者最好使用 const,因为这是 2013 年,而不是 1983 年)
  • 总是在 StackOverflow 上发布真实代码!

关于c++ - 奇怪的除法结果(C++/Xcode),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19134589/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com