我需要确切的值,但我的整数变量溢出了

I need exact value but my integer variable overflows

我需要除以等于一些大值之和的数字。但是过了一会儿,它溢出了,它等于一个负数。我尝试使用 BigInteger、decimal 和 double,但它不再起作用。

错误 message:System.ArgumentException '256' 的值对 'red' 无效。 'red' 应大于或等于 0 且小于或等于 255。'

编辑:当我检查 GaussFiltresi[syc] 的值时,我看到:'GaussFiltresi[syc]' 引发了 'System.IndexOutOfRangeException'

类型的异常
#region Gaussian Filter

public 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

参考System.Numerics.dll,您可以使用BigInteger代替Int64(a.k.a。long)。

另一种选择是在 10**3081e+308 之前使用不会溢出(至 PositiveInfinity)的 double。或者 decimal 超过 1e+28m.

评论后更新:你的表情:

GaussFiltresi[syc] * OkunanRenk.R

int 乘以 int。实际上变成了 14650719 * 160,这给出了 -1950852256。要将两个操作数提升为 BigInteger,这样乘法 * 将是大整数的乘法(永远不会溢出),将任一操作数转换为 BigInteger(另一个将提升免费 BigInteger),正如我在评论中所说:

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

所以整个语句变成:

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

int 乘以 int 将作为 int 乘法完成(结果可能 "wrap around")。结果将在稍后被 += 编辑为 BigInteger 这一事实并没有改变。这就是为什么在您的初始代码更改后它不起作用的原因。