C++ 我的代码正在生成一个“输出”;“南”;。为什么?

C++ 我的代码正在生成一个“输出”;“南”;。为什么?,c++,C++,我知道,当某个值除以0时,通常会发生此错误。 但就我而言: c[0]=((a[1]*b[2])-(a[2]*b[1])); c[1]=((a[2]*b[0])-(a[0]*b[2])); c[2]=((a[0]*b[1])-(a[1]*b[0])); cout<<c[0]<<c[1]<<c[2]; c[0]=((a[1]*b[2])-(a[2]*b[1]); c[1]=((a[2]*b[0])-(a[0]*b[2]); c[2]=((a[0]*b[1])-(

我知道,当某个值除以0时,通常会发生此错误。 但就我而言:

c[0]=((a[1]*b[2])-(a[2]*b[1]));
c[1]=((a[2]*b[0])-(a[0]*b[2]));
c[2]=((a[0]*b[1])-(a[1]*b[0]));
cout<<c[0]<<c[1]<<c[2];
c[0]=((a[1]*b[2])-(a[2]*b[1]);
c[1]=((a[2]*b[0])-(a[0]*b[2]);
c[2]=((a[0]*b[1])-(a[1]*b[0]);
cout(将此答案限制为IEEE754)

只有当其中一个术语为NaN,或在访问数组
a
b
的边界之外,或读取未初始化的数据时出现未定义的行为时,才可能出现这种情况

在IEEE754下,无法通过大值的乘法获得NaN

在C++11中,您可以使用
std::isnan
来检测NaN,在此之前或在C中,使用习惯用法

if (f != f){
    // `f` is NaN
}
因此,抛开未定义的行为不谈,问题的原因是调用堆栈的上层。表达式(如0.0/0.0)将生成NaN


关于你的陈述

某些值除以0

当除以0.0得到NaN的“某个值”的唯一值是0:
0.0/0.0
是NaN,
a
为正时,
a/0.0
为+Inf,如果
a
为负时为-Inf。

(将此答案限制为IEEE754)

只有当其中一个术语为NaN,或在访问数组
a
b
的边界之外,或读取未初始化的数据时出现未定义的行为时,才可能出现这种情况

在IEEE754下,无法通过大值的乘法获得NaN

在C++11中,您可以使用
std::isnan
来检测NaN,在此之前或在C中,使用习惯用法

if (f != f){
    // `f` is NaN
}
因此,抛开未定义的行为不谈,问题的原因是调用堆栈的上层。表达式(如0.0/0.0)将生成NaN


关于你的陈述

某些值除以0


当除以0.0时,“某个值”的唯一值为NaN:0:
0.0/0.0
为NaN;
a
为正时,
a/0.0
为+Inf;
a
为负时,-Inf。

发生这种情况时的类型和输入值是什么?添加代码以检测
nan
并中断,使用调试器检查传入值。有时候只是“垃圾进来,垃圾出去”。调试是你要做的第一件事。那么,就这样吧that@TusharChandra:请不要亲自投票。无论如何,我认为这个问题没有任何问题;也许你可以把它缩短成两段,把标题整理一下。很难为这样的事情制定一个有效的例子,并且答案是具体的,假设IEEE754。@StoryTeller我是stackoverflow的新手,所以学习如何发布问题。我相信你开始的时候也是个业余爱好者。所以,不要放弃投票或搁置问题。请尽力帮助。新产品并不能免除您的质量要求。这与你所问的话题无关(事实上,这很有趣)。改进你的帖子,它可以重新打开,要成为专家,你必须停止找借口。我只是在你粗鲁的回应后才投了反对票。那么,让我们删除评论中的这个毫无意义的论点。我将收回我的反对票。如果你改进了你的文章,我会投票重新打开。当这种情况发生时,类型和输入值是什么?添加代码以检测
nan
并中断,使用调试器检查传入值。有时候只是“垃圾进来,垃圾出去”。调试是你要做的第一件事。那么,就这样吧that@TusharChandra:请不要亲自投票。无论如何,我认为这个问题没有任何问题;也许你可以把它缩短成两段,把标题整理一下。很难为这样的事情制定一个有效的例子,并且答案是具体的,假设IEEE754。@StoryTeller我是stackoverflow的新手,所以学习如何发布问题。我相信你开始的时候也是个业余爱好者。所以,不要放弃投票或搁置问题。请尽力帮助。新产品并不能免除您的质量要求。这与你所问的话题无关(事实上,这很有趣)。改进你的帖子,它可以重新打开,要成为专家,你必须停止找借口。我只是在你粗鲁的回应后才投了反对票。那么,让我们删除评论中的这个毫无意义的论点。我将收回我的反对票。如果你改进了你的帖子,我会投票重新打开。@Bathseba,LOL现在我得到了nan的值,这些值早些时候给出了清晰的输出。你需要把一些代码放在适当的位置,检查所有的输入。实际原因将位于调用堆栈的更高位置。(类似于0.0/0.0的东西会生成NaN)。@Bathseba,谢谢你!这有点合乎逻辑error@Bathseba,LOL现在我得到了nan的值,这些值很早就给出了明确的输出。你需要把一些代码放在适当的位置,检查所有的输入。实际原因将位于调用堆栈的更高位置。(类似于0.0/0.0的东西会生成NaN)。@Bathseba,谢谢你!这是一个小小的逻辑错误