[英]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作為她的編譯器。
pow
和log10
不需要正確舍入; 它們產生的結果可以並且將在平台之間有所不同,即使對於“應該”與您的示例中完全相同的情況也是如此。 在這種情況下,OS X會產生比Windows更准確的結果,這會導致僅在Windows輸出中顯示的錯誤。
一個更好的解決辦法是由10整數使用重復的除法和乘法,而不是使用浮點在所有的(有類似你一個非常干凈的遞歸解決方案,而不需要你計算base
)。
順便說一句,一個迷你咆哮:很多數學庫在log10
, log2
, exp2
和pow
沒有正確處理10和2的小功率是可恥的 。 設計這些功能並不難,因為它們為這些情況做了“正確的事情”,並且可以在不對其他情況的性能產生不利影響的情況下完成。 雖然標准不需要它,但這是一件簡單的事情,它有助於拯救沒有經驗的程序員(如此常見)錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.