簡體   English   中英

在 C++ 中將 float 轉換為 int

[英]Casting float to int in C++

int uniquePaths(int m, int n) {
    int num = m+n-2;
    int den=1;
    double ans = 1;
    while(den<=m-1) {
        ans = ans*(num--)/(den++);
    }
    cout<<ans;
    return (int)ans; 
}

作為上述代碼段輸入的 m=53、n=4 的預期答案是 26235,但代碼返回 26234。但是,stdout 顯示 26235。

你能幫我理解這種行為嗎?

由於浮點舍入,您的代碼計算出ans為 26,234.999999999985448084771633148193359375。 當使用cout<<ans打印時,默認格式不顯示完整值並將其四舍五入為“26235”。 但是,當實際值轉換為int時,結果為 26,234。

num設置為m+n-2后,您的代碼正在計算num / (( m-1 )!( num-m+1 ),), 當然等於num / (( num-m+1 )!( m-1 ).),因此,您可以使用m-1num-m+1作為極限。 因此,您可以將while行更改為這兩行:

    int limit = m-1 < num-m+1 ? m-1 : num-m+1;
    while(den<=limit) {

然后你的代碼將運行到下限,這將避免將ans除以尚未包含的因素。 所有結果都將是精確的 integer 結果,沒有舍入錯誤,除非您嘗試計算的結果超出double精度格式的范圍,在該范圍內它能夠表示所有整數(在使用的無處不在的 IEEE-754 binary64 格式中最多為 2 53對於double )。

暫無
暫無

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

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