[英]C++; Floating Point exception; Without ./ operator
下面的示例來自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
綁定,使其成為雙常量。 等效於:
1.0 / (i+j+1)
只是短一點。
省略點時,將使用整數算術對表達式求值,除0, 0
所有條目的全零。
的.
字符是1.
double文字的一部分。 /
是算術運算符,因此右側表達式變為:
1. / (i+j+1);
結果是double類型的值。 省略.
字符使得文字的整數1
和表達式變為:
1 / (i+j+1);
其中兩個操作數都是整數值,結果是整數值。 C ++代碼中的空格對編譯器沒有影響。 出於可讀性原因,該語句應在適當的地方包含空格:
H.at<double>(i,j) = 1. / (i+j+1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.