注册 登录
编程论坛 C++教室

我的程序中的指针bd为什么读取不了b的地址???

小小的飞机 发布于 2013-07-31 17:41, 427 次点击
#include <iostream>
#include <math.h>
#include<cstdlib>

using namespace std;
double *a=new double[1000];
double *x=new double[1000];
double *b=new double[10];
double *c=new double[10000];
double *y=new double[10000];
int j=10000;
double *PI=new double[j];
double g;
double *ad;
double *xd;
double *bd;
double *cd;
double *yd;
int main ()
{
    // AGM π计算程序
    g=0;
       a[1000]=1;
    x[1000]=1;
    b[10]=sqrt(2)/2;  
    c[10000]=0.25;
    //给指针赋值:
    ad = &a[1000];
    xd = &x[1000];
    bd = &b[10];
    //重复计算
    while (g<=10)
    {
        y[1000]=a[1000];
        yd=&y[10000];
        a[1000]=(*ad + *bd)/2;//a[1000]=(*ad + *bd)/2
        b[10000]=sqrt(*bd * *yd);
        c[10000]=*cd - *xd * (*ad - *yd) * (*ad - *yd);
        x[1000]=*xd * 2;
        g++;
    }
    PI[j]=(*ad + *bd) * (*ad + *bd) / (4 * *cd);  //π
    cout<<"π=";
    cout<<PI[j];
    cout<<endl;
    system (" pause ");
    delete [j]PI;
    delete [100]a;
    delete [100]x;
    delete [1000]b;
    delete [1000]c;
    delete [1000]y;
    return 0;
}
3 回复
#2
小小的飞机2013-07-31 17:46
我的是用AGM公式算π,
公式:
初值:a=x=1 b=1/sqrt(2) c=1/4
重复计算:y=a a=(a+b)/2 b=sqrt(by) c=c-x(a-y)^2 x=2x
最后:pi=(a+b)^2/(4c)

我用断点看到bd读取不了b[10000]的地址。

#3
wp2319572013-07-31 19:18
有那么复杂吗

不过我的代码 只能取到小数点后14位是正确的  以后的就不对了  不知道为什么
程序代码:
/*公式:
初值:a=x=1 b=1/sqrt(2) c=1/4
重复计算:y=a a=(a+b)/2 b=sqrt(by) c=c-x(a-y)^2 x=2x
最后:pi=(a+b)^2/(4c)
*/
#include <stdio.h>
#include <math.h>
int main()
{
    double a,x,b,c,y,p;
    int k=0;
    a=1.0;
    x=1.0;
    b=1.0/(double)(sqrt(2.0));
    c=1.0/4.0;
    //开始计算π
start:
    y=a;
    a=(a+b)/2.0;
    b=(double)sqrt(b*y);
    c=c-x*(a-y)*(a-y);
    x=2.0*x;
    k++;
    if (k<1000) goto start;
    p=(a+b)*(a+b)/(4.0*c);
    printf("%.30f\n",p);
    return 0;
}



#4
rjsp2013-08-01 08:29
对于数组arr[N]而言,下标是从0到N-1,怎么还会出现 y[1000]=a[1000] 之类的东西
另外,对于你的 delete [100]a,我想问一下如果如果写成 delete [99]a 那效果有什么不同?
1