我的以下代码工作正常,但当我更改std::bitset<4> bin_x(i);
时
to std::bitset<5> bin_x(i);
给出了一个错误的Array Iterator Offset超出范围和C ++库超出范围。我设置了断点,我没有看到任何数组超出范围。可能是什么问题呢?
尾数:3或4。
指数:3。
偏见:3。
我正在使用Visual Studio 2013。
#include<iostream>
#include <math.h>
#include <bitset>
#include <limits.h>
#include <iomanip>
#include <array>
using namespace std;
double vm_value(string str_bin,int man)
{
double sum = 0;
char a[4];
int ia[4];
std::copy(str_bin.begin(), str_bin.end(), a);
for (int i = 0; i < (std::end(a) - std::begin(a)); i++)
{
ia[i] = a[i] - '0';
}
for (int i = 0; i < (std::end(ia) - std::begin(ia)); i++)
{
sum = sum + ldexp(ia[i], (-i - 1));
}
return sum;
}
int main()
{
int exp,man,bias,i;
double Vm,Ve;
cout << "No. of Bits of Exponent: ";
cin >> exp;
cout << "No. of Bits of Mantisa: ";
cin >> man;
cout << "Bias: ";
cin >> bias;
/*int *m;
m = new (nothrow) int[man];*/
for (i = 0; i < (pow(2,man));i++)
{
for (int j = 0; j < (pow(2, exp)); j++)
{
if (i==0)
{
std::bitset<3> bin_x(j);
cout << "\t\t";
std::cout << bin_x;
}
}
if (i == 0){ cout << "\n\t\tVe ->";}
for (int k = 0; k < (pow(2, exp)); k++)
{
if (i == 0)
{
int temp = k-bias;
cout << "\t\t";
cout << temp;
}
}
if (i == 0){ cout << "\nBits of\t\tVm\t\t\t\t\t\tVm x 2^Ve in Decimal\nMantissa\n"; }
std::bitset<4> bin_x(i); //THIS ONE THIS ONE THIS ONE
std::string str_bin = bin_x.to_string();
Vm= vm_value(str_bin,man);
cout << "\n";
double Vm1 = 1 + Vm;
std::cout << bin_x << "\t\t" << Vm1;
for (int l = 0; l < (pow(2, exp)); l++)
{
Ve = l - bias;
cout.setf(ios::fixed, ios::floatfield);
cout.precision(3);
std::cout << "\t\t" << ldexp(Vm1, Ve);
}
}
getchar();
getchar();
return 0;
}