C++;浮点异常;没有 ./ 运算符
Posted
技术标签:
【中文标题】C++;浮点异常;没有 ./ 运算符【英文标题】:C++; Floating Point exception; Without ./ operator 【发布时间】:2017-09-30 20:05:09 【问题描述】:以下示例来自 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);
这工作得很好。但在最后一行什么是 ./ 运算符?如果我用 / 替换它,它会给我浮点异常。
所以,在这两种情况下,当 i 和 j 为 0 时,我们都有无穷大;那么为什么我们会在第二种情况下得到浮点异常呢?
[1]http://docs.opencv.org/trunk/d3/d63/classcv_1_1Mat.html
【问题讨论】:
请提出对此问题的改进建议。谢谢 如果你知道了,我可以删除我的答案,这样你就可以删除你的帖子了。只要说出这个词。 @StoryTeller 我认为这是一个很好的答案,请不要删除它。这将有助于社区。我正在等待更多的答案。为什么要删除它(我只是好奇)? 如果您想删除您的问题,我的帖子会阻止它,因为它已被投票。所以只是想给你一个选项,如果这会吸引大量的反对票。 ***.com/a/12617540 【参考方案1】:./
不是运算符。点与1
绑定,使其成为双常量。相当于这样:
1.0 / (i+j+1)
只有一点点。
当您省略点时,表达式将使用整数算术进行计算,除0, 0
之外的所有条目均为零。
【讨论】:
鲜为人知的是 /。运营商,它会开源您的网站。【参考方案2】:.
字符是 1.
双字面值的一部分。 /
是算术运算符,因此右侧表达式变为:
1. / (i+j+1);
结果是一个 double 类型的值。
省略.
字符使其成为1
的整数文字,表达式变为:
1 / (i+j+1);
其中两个操作数都是整数值,结果是整数值。 C++ 代码中的空格对编译器没有影响。出于可读性原因,该语句应在适当的地方包含空格:
H.at<double>(i,j) = 1. / (i+j+1);
【讨论】:
以上是关于C++;浮点异常;没有 ./ 运算符的主要内容,如果未能解决你的问题,请参考以下文章