WindowsAPI: MulDiv

來源:互聯網
上載者:User
MulDiv(a, b, c) 中的 a、b、c 是三個 Integer, 同時返回一個 Integer.

其計算方式類似於: a * b / c 或 a * b div c, 但也有區別.

//例一: 相同處var  a,b,c,n1,n2: Integer;begin  a := 4;  b := 3;  c := 2;  n1 := a * b div c;  n2 := MulDiv(a, b, c);  ShowMessageFmt('%d : %d', [n1, n2]); {6 : 6}end;

//例二: MulDiv 中前兩個 32 位整數 a 和 b 相乘後會先得出一個 64 位元整數, 這可以盡量使運算不會溢出.var  a,b,c,n1,n2: Integer;begin  a := MaxInt div 2;  b := 3;  c := 2;  n1 := a * b div c;     {這個運算會溢出}  n2 := MulDiv(a, b, c); {MulDiv 會算出正確的結果}  ShowMessageFmt('%d : %d', [n1, n2]); {-536870913 : 1610612735}end;

//例三: MulDiv 會自動四捨五入.var  a,b,c,n1,n2: Integer;begin  a := 1;  b := 7;  c := 4;  n1 := a * b div c;     {這個結果只是截取了整數部分}  n2 := MulDiv(a, b, c); {MulDiv 會四捨五入}  ShowMessageFmt('%d : %d', [n1, n2]); {1 : 2}end;

//例四: 也有 MulDiv 算不了的, 算不了就返回 -1var  n1,n2: Integer;begin  n1 := MulDiv(MaxInt, MaxInt, 2);  n2 := MulDiv(1, 2, 0);  ShowMessageFmt('%d : %d', [n1, n2]); {-1 : -1}end;
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.