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

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

我需要精確的值,但我的整數變量溢出

我需要精確的值,但我的整數變量溢出

C#
DIEA 2023-07-22 18:27:07
我需要除以等于一些大值之和的數字。但過了一段時間,它就溢出了,等于負數。我嘗試使用 BigInteger、decimal 和 double,但它再次不起作用。錯誤消息:System.ArgumentException“‘256’的值對于‘red’無效。“紅色”應大于或等于 0 且小于或等于 255。編輯:當我檢查 GaussFiltresi[syc] 的值時,我看到:'GaussFiltresi[syc]' 拋出了類型為 'System.IndexOutOfRangeException' 的異常#region Gaussian Filterpublic void gaussianfilter (int SablonBoyutu,Bitmap GirisResmi,Bitmap CikisResmi){int ResimGenisligi = GirisResmi.Width;int ResimYuksekligi = GirisResmi.Height;int syc = 0;BigInteger toplamR;BigInteger filtrekatsayitoplami; BigInteger ortalamaR;int kernelsinir = ((SablonBoyutu - 1) / 2); for ( i = -kernelsinir; i <= kernelsinir; i++){ for ( j = -kernelsinir; j <= kernelsinir; j++)  {  //some calculations  }}for (int x = (kernelsinir); x < ResimGenisligi - kernelsinir; x++){ for (int z = (kernelsinir); z < ResimGenisligi - kernelsinir; z++) {  syc = 0;  toplamR = 0;  for (int y = -(kernelsinir); y <= kernelsinir; y++)    {    for (int d = -(kernelsinir); d <= kernelsinir; d++)    {    OkunanRenk = GirisResmi.GetPixel(x + y, d + z);    toplamR += GaussFiltresi[syc] * (BigInteger)(OkunanRenk.R);    //toplam R=1662424090 and GaussFiltresi[syc] = 5389698 before overflowing     syc++;    }   }ortalamaR = toplamR / filtrekatsayitoplami; //toplamR is negative CikisResmi.SetPixel(x, z, Color.FromArgb((int)ortalamaR, (int)ortalamaR,(int)ortalamaR));  } }}        #endregion
查看完整描述

1 回答

?
拉風的咖菲貓

TA貢獻1995條經驗 獲得超2個贊

參考System.Numerics.dll,您可以使用BigInteger代替Int64(又名long)。

另一種選擇是使用在, 或之前double不會溢出(到PositiveInfinity)。或者說,這超過了。10**3081e+308decimal1e+28m

評論后更新: 你的表情:

GaussFiltresi[syc]?*?OkunanRenk.R

是 anint次 an?int。事實上成為14650719 * 160,即給出-1950852256。要將兩個操作數提升為BigInteger,以便乘法*將是大整型(永不溢出)的乘法,請將其中一個操作數轉換為BigInteger(另一個將BigInteger免費提升為 ),正如我在評論中所說:

GaussFiltresi[syc]?*?(BigInteger)(OkunanRenk.R)

所以整個語句變成:

toplamR?+=?GaussFiltresi[syc]?*?(BigInteger)(OkunanRenk.R);

intan與 an的乘法int將作為int乘法完成(結果可能會“環繞”)。結果將被稍后+=編輯這一事實不會改變它BigInteger。這就是為什么它在初始代碼更改后不起作用的原因。


查看完整回答
反對 回復 2023-07-22
  • 1 回答
  • 0 關注
  • 172 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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