C ++;浮点异常;没有./运算符

时间:2017-09-30 20:05:10

标签: c++ loops opencv mat

以下示例来自OpenCv文档[1]。

Mat H(100, 100, CV_64F);
for(int i = 0; i < H.rows; i++)
    for(int j = 0; j < H.cols; j++)
        H.at<double>(i,j)=1./(i+j);

这完全没问题。但在最后一行是什么./ operator?如果我用/替换它,它会给我浮点异常。

因此,在两种情况下,当i和j为0时,我们有无穷大;那为什么我们为第二种情况得到浮点异常呢?

[1] http://docs.opencv.org/trunk/d3/d63/classcv_1_1Mat.html

2 个答案:

答案 0 :(得分:4)

./不是运营商。点与1绑定,使其成为双常数。它等同于:

1.0 / (i+j+1)

只有一点点。

当省略点时,使用整数运算来计算表达式,为0, 0以外的所有条目赋予全零。

答案 1 :(得分:2)

.字符是1.双字词的一部分。 /是算术运算符,因此右侧表达式变为:

1. / (i+j+1);

,结果是double类型的值。 省略.字符使其成为1的整数文字,表达式变为:

1 / (i+j+1);

其中两个操作数都是整数值,结果是整数值。 C ++代码中的空格对编译器没有任何影响。出于可读性原因,该陈述应包括适当的空格:

H.at<double>(i,j) = 1. / (i+j+1);