簡體   English   中英

浮點異常 C++ 為什么以及它是什么?

[英]Floating Point Exception C++ Why and what is it?

我正在為 Euler 項目問題 3 構建一個程序,雖然這可能並不重要,但我目前正在嘗試讓這段代碼接受一個數字並測試它是否為素數。 現在,在我對函數進行故障排除之前,它在輸入數字后立即給我錯誤“浮點異常”。 這是代碼:

int main()
{
    int input;
    cout << "Enter number: " << endl;
    cin>> input;
    int i = input/2;
    int c;
    for (i>0; i--;) {
        c= input%i;
        if (c==0 || i == 1)
            cout << "not prime" << endl;
        else
            cout << "prime" << endl;
    }
    return 0;
}

所以本質上為什么它給我一個浮點異常,這甚至意味着什么?

浮點數”是計算機通常表示非整數的數字的方式——基本上是帶小數點的數字。 在 C++ 中,您使用float而不是int來聲明它們。 浮點異常是當您嘗試用浮點數做一些不可能的事情時發生的錯誤,例如除以零。

for (i>0; i--;)

可能是錯誤的,應該是

for (; i>0; i--)

反而。 注意我把分號放在哪里。 條件發生在中間,而不是開始。

浮點異常的原因有很多。 查看您的代碼,您的 for 循環似乎有點“不正確”。 看起來可能被零除。

for (i>0; i--;){
c= input%i;

那是在某個時候被零除,因為你正在遞減 i。

由於此頁面是 google 搜索“c++ 浮點異常”的第 1 個結果,因此我想添加可能導致此類問題的另一件事:使用未定義的變量。

問題出在代碼片段中的 for 循環中:
對於 (i > 0; i--;)

在這里,您的意圖似乎是進入循環 if (i > 0)在 for loop 完成后將i 的值減一。

它是那樣工作的嗎? 讓我們來看看。

查看 for() 循環語法:

**for ( initialization; condition check; increment/decrement ) {  
    statements;  
}**

初始化只在循環開始時執行一次。 密切注意“;” 在您的代碼片段中並使用 for 循環語法將其映射。

初始化:i > 0:只執行一次。 對您的代碼沒有任何影響。

條件檢查: i --:遞減。

              Here, i is used for condition check and then it is decremented. 
              Decremented value will be used in statements within for loop. 
              This condition check is working as increment/decrement too in your code. 

讓我們停在這里看看浮點異常。

它是什么? 一個簡單的例子是除以 0。您的代碼也發生了同樣的情況。

當條件檢查中 i 達到 1 時,條件檢查驗證為真。
由於后遞減,當它進入 for 循環時 i 將為 0。

Modulo operation at line #9 results in divide by zero operation.  

有了這個背景,你應該能夠解決 for 循環中的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM