32位数字C 的例外

Exception for 32 bit number C++

本文关键字:数字 32位      更新时间:2023-10-16

为什么我得到异常

Unhandled exception at 0x00000001 in TestingCOA.exe: 0xC0000005: Access violation (parameters: 0x00000008).

当我尝试使用4294967295或更高数字时。在我的计算机上sizeof Double是8bytes,它应该能够处理和使用2^64 -1号码,但它正在生成32位数字的例外,为什么?

int main()
{
  double n,remainderA;
  int AfterDecimal1[64],RemExponent1;
  cout<< "Enter numbern";
  cin>> n;
  remainderA=a-(int)a;
   HandleFractionNumber(remainderA,AfterDecimal1,RemExponent1);
}

int HandleFractionNumber(double remainder,int (&Goku)[64],int &RemExponent)
{
int x=0;
for(int i=0;;i++)
{
    remainder*=2;
    if(remainder>1)
    {
        remainder-=1;
        Goku[x]=1;
        x++;
    }
    else
        if(remainder<1)
        {
            Goku[x]=0;
            x++;
        }
        if(remainder==1)
        {
            Goku[x]=1;
            break;
        }
        RemExponent=x;
}

double不能那样工作。它是一个字段和某些格式(称为IEEE双重精度)的结构。并非所有64位都可以用于Mantissa。

然而,它应该在输入处食用您提到的数字(4294967295)。您确定这是您所说的吗?是您引用的程序吗?

remainderA = a - (int)a;

在32位计算机上,如果A> 429496725.尝试打印remainderA,则此处的结果是不确定的,我敢打赌它很大,领先的HFN覆盖了缓冲区。

您的数组边界用完了。

x 永远完成,直到大于64。

在上面的代码中,没有理由剩余的也永远成为一个。将双重与==进行比较是不正确的。它仅适用于整数算术。