簡體   English   中英

C程序在OSX和Windows上給出不同的結果

[英]C program giving different results on OSX and windows

我在C中寫了一個遞歸函數來反轉一個整數(123 - > 321),當我在我的Mac上運行它時工作正常,但是當我的教練在運行Windows的計算機上運行它時表現得很奇怪。

int rev(int num)
{
    int base;

    if (num < 10) return (num); 

    base = pow(10,(int)log10(num));
    return(rev(num/10)+num%10*base);
}

例如,在OSX上調用rev(8765)返回5678,在Windows上,rev(8765)返回5672.我無法訪問Windows機器以嘗試在調試模式下運行程序,所以我一直在很難想到問題是什么。 我非常感謝任何見解!

環境:

我使用的是OSX 10.8和GCC 4.2。 我很確定我的導師正在使用MinGW作為她的編譯器。

powlog10不需要正確舍入; 它們產生的結果可以並且將在平台之間有所不同,即使對於“應該”與您的示例中完全相同的情況也是如此。 在這種情況下,OS X會產生比Windows更准確的結果,這會導致僅在Windows輸出中顯示的錯誤。

一個更好的解決辦法是由10整數使用重復的除法和乘法,而不是使用浮點在所有的(有類似你一個非常干凈的遞歸解決方案,而不需要你計算base )。


順便說一句,一個迷你咆哮:很多數學庫在log10log2exp2pow沒有正確處理10和2的小功率是可恥的 設計這些功能並不難,因為它們為這些情況做了“正確的事情”,並且可以在不對其他情況的性能產生不利影響的情況下完成。 雖然標准不需要它,但這是一件簡單的事情,它有助於拯救沒有經驗的程序員(如此常見)錯誤。

暫無
暫無

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

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