zoukankan      html  css  js  c++  java
  • 哈利法克斯(Halifax),布里格斯(Briggs)计算对数的方法-1620年

    具体原理请参考《费恩曼物理学讲义》第1卷,新千年版,223~226.

    代码如下

    #include <iostream>
    #include<vector>
    #include<math.h>
    #include<iomanip>
    using namespace std;
    
    double getSquare(double N)
    {
        double a;
        double _a=N/3;//迭代过程中的新值
        for(;a!=_a;)
        {
            a=_a;
            _a=(a+N/a)/2;
        }
        return a;
    }
    double getSeveralSquare(double N,int n)
    {
        float temp;
        for(int i=0;i<n;i++)
        {
            temp=N;
            N=getSquare(temp);
        }
        return N;
    }
    
    double lg10(double a)
    {
        int num=31;//开方根次数
        double *squareArray=new double[num];
        int *s_num=new int[num];
        int i;
        double delta=0.254;
        s_num[0]=pow(2,num-1);
    
        double sum=0;
        for(i=0;i<num;i++)
        {
            squareArray[i]=getSeveralSquare(10,i);
            //cout<<setprecision(8)<< squareArray[i]<<endl;
            if(i<num-1)
                s_num[i+1]=s_num[i]/2;
        }
    
        for(i=1;i<num;i++)
        {
            if(squareArray[i]<a&&a<squareArray[i-1])
            {
                a/=squareArray[i];
    
                sum+=s_num[i];
            }
        }
        sum =(sum+delta)/s_num[0];
    
        delete [] squareArray;
        delete [] s_num;
        return sum;
    }
    
    int main()
    {
        double a,N=10;
        cout<<setprecision(8);
        cout<<"log10(3)="<<lg10(3)<<endl;
    
        return 0;
    }

    运行结果如下:

  • 相关阅读:
    SQL注入(手工篇)
    sed命令
    交互输入与for语句
    编程原理
    grep与正则表达式
    重定向和管道符
    shell_oneday_历史命令相关
    python_01_初识python
    C# 上传文件
    C# in 参数化处理 (记)
  • 原文地址:https://www.cnblogs.com/phoenixdsg/p/13859635.html
Copyright © 2011-2022 走看看