亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

區別:除以雙變量||| 除以帶小數的 int 變量(例如 1 / 2.00)||| 將(雙)

區別:除以雙變量||| 除以帶小數的 int 變量(例如 1 / 2.00)||| 將(雙)

C#
忽然笑 2022-07-23 17:29:19
以下替代方案之間有什么區別嗎?在這個簡單的循環中,結果之間似乎沒有任何區別,但我想知道在某些情況下,不同的方法是否會導致某些結果差異。我想知道這些方法是完全一樣的還是有一些細微的差別?x 是雙倍的:        double x = 2;         double sum = 0;        while (true)        {            sum += 1 / ((x - 1) * 2);            x++;        }x 是 int,但 (double) 在公式中的 2 之前:        int x = 2;         double sum = 0;        while (true)        {            sum += 1 / ((x - 1) * (double)2);            x++;        }x 是 int 但 2 寫為十進制:        int x = 2;        double sum = 0;        while (true)        {            sum += 1 / ((x - 1) * 2.00);            x++;        }
查看完整描述

2 回答

?
30秒到達戰場

TA貢獻1828條經驗 獲得超6個贊

沒有區別(*) - 你被困在一個無休止的 while 循環中,無法擺脫它。


(*)“離開”循環的唯一方法是例外......如果你x++x類型是......雙倍需要更長的時間才能溢出double......


查看完整回答
反對 回復 2022-07-23
?
慕田峪4524236

TA貢獻1875條經驗 獲得超5個贊

評論中的結果及其類型:


        var a = 2;   //int

        var b = 2.0; //double

        var c = 2d;  //double

        var d = 2f;  //float (alias of System.Single)

        var e = 2m;  //decimal

        var f = 2l;  //long

        var g = 2ul; //ulong

        var h = 2.0m; //decimal

        var i = 2.0f; //float


        var t = 1 / 2.0; //double

        var u = 1 / 2; //int!

        var v = 1 / ((6 - 1) * 2); //int!

        var w = 1 / 2 + 6 / 2.0 //int + double = 0 + 3 = 4

查看您的樣品:

  1. 由于 double 參與所有公式,結果將是與 sum 類型匹配的 double 并且將根據類型正確計算

  2. 你明確地將 int 轉換為 double - 看 #1

  3. 2.00 是雙重的 - 看 #1

因此,所有樣本將以相同的方式計算總和,

除了 int 類型會在無限循環中提前溢出


查看完整回答
反對 回復 2022-07-23
  • 2 回答
  • 0 關注
  • 207 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號