L - 浮動小数点数

L - 浮動小数点数

ここに画像を挿入説明
ここに画像を挿入説明
効果タイトル:私たちは、コンピュータに格納された浮動小数点数は、3つの部分に分割されている説明タイトル、最初のシンボルは負(0、正、負の1)を表し、第2の部分は、仮数Mであり、三次の部分でありますビット数が異なる場合ならばEコード、M及びEによってコンピュータにバイナリ表現は、彼らは、最大値が異なって表すことができます。我々はバイナリ表現に指数関数的な入力の10進数を必要とする被験体を形成する、仮数Mと指数Eを決定しました

それは書き留めるために、他人のアイデアに描画します。
ここに画像を挿入説明
ここに画像を挿入説明
コードは以下の通りです。

#include<bits/stdc++.h>
using namespace std; 
int i, j;
double a[10][31],m[10],e[31];
void init() 
{
	for (i = 0;i < 10;i++)
		m[i] = 1 - pow(0.5, (i + 1));//计算m 
	for (j = 1;j < 31;j++)
		e[j] = pow(2,j) - 1;//计算e 
	for (i = 0;i < 10;i++)
		for (j = 1;j < 31;j++)
			a[i][j] = log10(m[i]) + e[j] * log10(2);//枚举 
}
int main()
{
	init();
	double A,t;//A为t的小数部分,t为十进制转化为二进制取对数后的值 
	int B;//B为t的整数部分 
	char s[25];
	while(cin>>s)
	{
		for (i = 0;;i++)
			if (s[i] == 'e')
			{
				s[i] = ' ';
				break;
			}//将e置空是为了方便读入A和B
		sscanf(s, "%lf %d", &A, &B);
		if (!A&&!B) break;
		t = log10(A)+B;
		for (i = 0;i < 10;i++)
			for (j = 1;j < 31;j++)
				if (fabs(a[i][j] - t) < 1e-4) goto loop;//允许实际误差<10^(1e-4)
		loop:
			cout<<i<<" "<<j<<endl; 
	}
	return 0;
}
公開された18元の記事 ウォン称賛14 ビュー370

おすすめ

転載: blog.csdn.net/weixin_45750972/article/details/103213918