2014-01-16 33 views
-3

無論出於何種原因,一個簡單的測試程序,通過即使分工零個差錯零產生部分是不可能的,因爲據我可以告訴:除零錯誤在一個簡單的程序

#include <iostream> 

using namespace std; 

int main() 
{ 
    int Level = 1; 
    int EXPTNL = 0; 

    cout << Level << endl; 

    EXPTNL = (Level * 1250) * 1000 * 1000 * Level/(2/((1000 * (Level * 1250))/2)); 

    cout << EXPTNL << endl; 

    system("Pause"); 
} 

我缺少的東西?這個完全相同的公式在另一個更復雜的程序中工作得很好。

回答

2

這幾乎肯定會導致零值:

(2/((1000 * (Level * 1250)) 

如果level是非零,1000 * (Level * 1250),比2大很多,其在整數除法將給出結果爲零。

也許你想使用一個浮點值,以便EXPTNL變成浮點計算,然後在最後使它成爲一個整數。

我也希望(級別* 1250)* 1000 * 1000過濾一個32位整數,所以你可能希望作爲浮點計算。

只需將每個1250值變成1250.0並解決問題即可。

+0

感謝您的回答。它幫助我解決了這個問題,但它暴露了我的exp計算中的一個主要問題,那就是簡化公式的分子的整個小數點。 – Geowil

3

這是整數除法:

2/((1000 * (Level * 1250))/2) 

和,因爲分母的大小比分子大,你得到0

這本來是很容易測試:

std::cout << (2/((1000 * (Level * 1250))/2)) << std::endl; 

您需要浮點除法,您可以通過在分子或分母(或兩者)中使用浮點數來獲得浮點除法。

+0

你說得對。在這個程序中,這起源於我將EXPTNL設置爲double而不是int,因此即使程序編譯時沒有警告,它也會產生我還沒有看到的錯誤數據,因爲我沒有將主函數鏈接到任何來自那個班的東西進行測試:o三隻一石三鳥。 – Geowil