-1

なぜ例外が発生するのですか

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 number\n";
  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;
}
4

3 に答える 3

2

ダブルはそのようには機能しません。これは、フィールドと特定の形式 ( IEEE double precisionとして知られている) を持つ構造体です。仮数に 64 ビットすべてを使用できるわけではありません。

それでも、入力時にあなたが言及した数(4294967295)を食べたはずです。これはあなたが入れたものだと確信していますか?あなたが引用したプログラムはすべてですか?

于 2012-12-22T13:58:10.127 に答える
0

配列の境界が不足しています。

x ++は、64より大きくなるまで永久に実行されます。

上記のコードでは、余りが1つになる理由はありません。doubleを==と比較するのは正しくありません。整数演算に対してのみ確実に機能します。

于 2012-12-22T17:14:09.183 に答える