我知道当某个值除以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];
这段代码有时会生成 NaN 作为输出
答案 0 :(得分:2)
(限制对IEEE754的回答)。
如果其中一个术语是NaN,或者在您访问数组a
或b
范围之外的某些未定义行为表现形式时,仅可能阅读未初始化的数据。
在IEEE754下,您无法通过乘以大值来获得NaN。
从C ++ 11开始,您可以使用std::isnan
来检测NaN,在此之前或在C中,使用成语
if (f != f){
// `f` is NaN
}
因此,将未定义的行为放在一边,问题的原因在于调用堆栈更高。表达式如0.0 / 0.0将生成NaN。
关于你的陈述
某个值除以0
仅值&#34;某些值&#34;当除以0.0时,NaN为0:0.0 / 0.0
为NaN,如果a / 0.0
为正,则a
为+ Inf;如果a
为负,则为{Inf。< / p>