【发布时间】:2015-10-15 17:38:42
【问题描述】:
给定相同的两个输入和一个会导致溢出的算术运算,溢出的结果是否总是相同的?
仅作为背景,我正在一个 Visual Studio C++ 项目中工作,其中一些时髦的小浮点数字来自一些高斯,通过 calllib 从 Matlab 传递过来,这给了我看起来像溢出的东西,其中指数跳转到巨大的数字这个矩阵的某些地方。问题是当我重新运行我的代码时,我仍然会在不同的地方出现溢出,这让我想知道溢出行为有多稳定和确定性。
【问题讨论】:
-
从语言的角度来看,有符号整数溢出会导致未定义的行为。因此,特定实现可以提供确定性行为。但是,一个不同的实现可能会把兔子从帽子里拉出来。
-
从语言的角度来看非常好,我会在一天结束时做一些实验,看看 Visual c++ 2010 对 floatmax*floatmax 和 intmax+intmax 的表现如何。
-
你可以责怪你的编译器或机器,但这永远不会让你到任何地方。显然,真正的问题是数学模型完全被破坏并产生了荒谬的结果。
-
您询问“算术溢出”并将您的问题标记为“浮点”和“整数溢出”?下定决心,然后问。
-
@PascalCuoq 抱歉,您可能没有意识到这里使用的标签有限。没有“算术溢出”标签,也没有“浮点溢出”标签,并且“溢出”仅与某些 CSS 内容相关。我正在使用浮点值,因此使用了浮点标记。如果您有代表随意制作一些标签,如果您觉得我的标签弄乱了使用过的标签,我会很容易地使用它们。
标签: c++ floating-point integer-overflow arithmetic-expressions