我需要除以等于一些大值之和的數(shù)字。但過了一段時(shí)間,它就溢出了,等于負(fù)數(shù)。我嘗試使用 BigInteger、decimal 和 double,但它再次不起作用。錯(cuò)誤消息:System.ArgumentException“‘256’的值對于‘red’無效?!凹t色”應(yīng)大于或等于 0 且小于或等于 255。編輯:當(dāng)我檢查 GaussFiltresi[syc] 的值時(shí),我看到:'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 回答

拉風(fēng)的咖菲貓
TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊
參考System.Numerics.dll
,您可以使用BigInteger
代替Int64
(又名long
)。
另一種選擇是使用在, 或之前double
不會(huì)溢出(到PositiveInfinity
)?;蛘哒f,這超過了。10**308
1e+308
decimal
1e+28m
評論后更新: 你的表情:
GaussFiltresi[syc]?*?OkunanRenk.R
是 anint
次 an?int
。事實(shí)上成為14650719 * 160
,即給出-1950852256
。要將兩個(gè)操作數(shù)提升為BigInteger
,以便乘法*
將是大整型(永不溢出)的乘法,請將其中一個(gè)操作數(shù)轉(zhuǎn)換為BigInteger
(另一個(gè)將BigInteger
免費(fèi)提升為 ),正如我在評論中所說:
GaussFiltresi[syc]?*?(BigInteger)(OkunanRenk.R)
所以整個(gè)語句變成:
toplamR?+=?GaussFiltresi[syc]?*?(BigInteger)(OkunanRenk.R);
int
an與 an的乘法int
將作為int
乘法完成(結(jié)果可能會(huì)“環(huán)繞”)。結(jié)果將被稍后+=
編輯這一事實(shí)不會(huì)改變它BigInteger
。這就是為什么它在初始代碼更改后不起作用的原因。
- 1 回答
- 0 關(guān)注
- 171 瀏覽
添加回答
舉報(bào)
0/150
提交
取消