实在无法解决,老师帮忙看看那里错了

vloso 2018-06-13 11:06:10
#include <iostream>
#define PI 3.14159265
#include <windows.h>
#include <iomanip>
using namespace std;

int main()
{
//cout.precision(6);

double Result=PI/2,x=0,b=1,y=0;
int a=3,c=0,n=0;
while(Result!=y)
{
if(x==0)
x=1+(double)1/a;
else
{
b=1;
n=n+1;
for(int i=0;i<=n;i++)
{
b=(double)b*(c=1+c)/a;
a=a+2;
}
a=3;
c=0;
y=x;
y=y+b;
cout<<"Result:"<<Result<<" == "<<x<<" + "<<b<<" y:"<<y<<endl;
// Sleep(1000);
}
}

cout<<"结束";
return 0;
}



///求PI值,PI/2 = 1 + 1/3 + 1/3*2/5 + 1/3*2/5*3/7 + ...

整个计算逻辑应该是没错的,但是派的值小数点的位数 跟结果的位数差距一位所以一直都不能对等成立,帮忙修改一下的
...全文
654 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2018-06-14
  • 打赏
  • 举报
回复
浮点数比较大小,不能按照整型数比较大小那样,直接比较。比如double a, b; 若比较它们相等,需要:
if (fabs(a - b) < 1e-6)
若这个表达式为真,则表示a与b相等;
自信男孩 2018-06-14
  • 打赏
  • 举报
回复
引用 1 楼 weixin_42232897 的回复:

#include <iostream>
#define PI 3.14159265
#include <windows.h>
#include <iomanip>
using namespace std;

int main(){
	double Result = PI / 2, y = 1.0,Middle=1.0;
	int KongZhi = 1;
	while (abs(Result-y)>0.00001)	{//这个位置建议应该改一下  while (Result != y)	{
		Middle = Middle*KongZhi / (KongZhi * 2 + 1);
		y = y + Middle;

		cout << "KongZhi:=" << KongZhi << "	"<< "Middle:=" << Middle << "	y=" << (y*2)<< endl;

		++KongZhi;
		//Sleep(5000);
	}
	cout << "结束";
	getchar();
	getchar();
	return 0;
}
建议用fabs函数,abs是用于整型数的。
vloso 2018-06-14
  • 打赏
  • 举报
回复
引用 1 楼 weixin_42232897 的回复:

#include <iostream>
#define PI 3.14159265
#include <windows.h>
#include <iomanip>
using namespace std;

int main(){
	double Result = PI / 2, y = 1.0,Middle=1.0;
	int KongZhi = 1;
	while (abs(Result-y)>0.00001)	{//这个位置建议应该改一下  while (Result != y)	{
		Middle = Middle*KongZhi / (KongZhi * 2 + 1);
		y = y + Middle;

		cout << "KongZhi:=" << KongZhi << "	"<< "Middle:=" << Middle << "	y=" << (y*2)<< endl;

		++KongZhi;
		//Sleep(5000);
	}
	cout << "结束";
	getchar();
	getchar();
	return 0;
}
能不能解释一下哪里出了问题,不胜感激!
zhgwbzhd 2018-06-14
  • 打赏
  • 举报
回复
浮点小数在计算机内一般都存在误差,所以不要使用 等于 来判断。 例如,一个浮点小数 2.0在计算机内存储,可能是1.99999999999,也可能是2.0000000001。
weixin_42232897 2018-06-14
  • 打赏
  • 举报
回复

#include <iostream>
#define PI 3.14159265
#include <windows.h>
#include <iomanip>
using namespace std;

int main(){
	double Result = PI / 2, y = 1.0,Middle=1.0;
	int KongZhi = 1;
	while (abs(Result-y)>0.00001)	{//这个位置建议应该改一下  while (Result != y)	{
		Middle = Middle*KongZhi / (KongZhi * 2 + 1);
		y = y + Middle;

		cout << "KongZhi:=" << KongZhi << "	"<< "Middle:=" << Middle << "	y=" << (y*2)<< endl;

		++KongZhi;
		//Sleep(5000);
	}
	cout << "结束";
	getchar();
	getchar();
	return 0;
}
weixin_42232897 2018-06-14
  • 打赏
  • 举报
回复

这是我运行的情况
weixin_42232897 2018-06-14
  • 打赏
  • 举报
回复
VS2017 我都试过了可以的

#include <iostream>
#define PI 3.14159265
#include <windows.h>
#include <iomanip>
using namespace std;

int main() {
	double Result = PI / 2, y = 1.0, Middle = 1.0;
	int KongZhi = 1;
	while (fabs(Result - y)>0.00001) {//这个位置建议应该改一下  while (Result != y)    {
		Middle = Middle * KongZhi / (KongZhi * 2 + 1);
		y = y + Middle;

		cout << "KongZhi:=" << KongZhi << "    " << "Middle:=" << Middle << "    y=" << (y * 2) << endl;

		++KongZhi;
		//Sleep(5000);
	}
	cout << "结束";
	getchar();
	getchar();
	return 0;
}
vloso 2018-06-14
  • 打赏
  • 举报
回复
引用 1 楼 weixin_42232897 的回复:

#include <iostream>
#define PI 3.14159265
#include <windows.h>
#include <iomanip>
using namespace std;

int main(){
	double Result = PI / 2, y = 1.0,Middle=1.0;
	int KongZhi = 1;
	while (abs(Result-y)>0.00001)	{//这个位置建议应该改一下  while (Result != y)	{
		Middle = Middle*KongZhi / (KongZhi * 2 + 1);
		y = y + Middle;

		cout << "KongZhi:=" << KongZhi << "	"<< "Middle:=" << Middle << "	y=" << (y*2)<< endl;

		++KongZhi;
		//Sleep(5000);
	}
	cout << "结束";
	getchar();
	getchar();
	return 0;
}
兄弟你这个代码毫无输出可言啊,除了cout<<"结束";其他都不会运行啊,

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧