欧拉数展开


#include <iostream>
#include <iomanip>
using namespace std;
int a[8], e[8];
void term (int n)
{
    a[0]=1;
    for (int i=0; i<8; i++)
    {
      if (i<7)
      {
        a[i+1]+=(a[i]%n)*100000;
      }
    /* else
      {
        a[i+1]+=((a[i]/640)%(n/640))*100000;
      }
    */
      a[i]=a[i]/(n);
    }
}
void sum ()
{
}
int factorial(int x, int result = 1) 
{
  if (x == 1) 
    return result;
  else return factorial(x - 1, x * result);
}

int main()    
{
  int n=1;
  for (int i=1; i<=30; i++)
  {
     term(n);
     cout << a[0] << " "<< a[1] << " " << a[2] <<  " " 
          << a[3] <<  " " << a[4] << " " << a[5]<< " " 
          << " " << a[6] << " " << a[7] << endl;
     n++;
     for (int j=1; j<8; j++) 
       a[j]=0;
  }
  return 0;
}    

我上面的代码就是目前为止的代码。Sum和其余部分故意未完成,因为它们仍处于构建阶段。

现在,我需要展开欧拉数,这应该会让你使用像x[n]这样的级数来将结果分成多个部分,并使用函数来计算结果等等。

根据,我需要找到麦克劳林展开的具体部分并计算它

所以e中的X =1+ X +(1/2!)* X等等总是1得到e=1+1+1/2!+1/3!+1/n!计算

程序应按N

的顺序计算

所以如果N是1,它将只计算相应的阶乘除法部分;这意味着变量的一部分将保存计算结果,即x=1.00000000~,而另一部分将保存到目前为止的实际总和,即e=2.000000~

N = 2x = 1/2 !, e=前一个e+x

N = 3x = 1/3 !, e=前一个e+x

N的最大个数为29每次计算结果时,需要将点后的所有数字保存到单独的变量中,如x[1] x[2] x[3],直到将精度的30~35位数字都填满为止。所以在打印出来的时候,在N=2

的情况下

x[0]。x [1] x x [3] ~ [2]应该是0.50000000000000000000其中x[0]将保存点上方的值,x[1~3]将保存其余的值,每个值为5位。

好吧,是的,抱歉如果我的解释糟糕,但这就是它的要求。所有数组必须是整型的,不能使用其他类型我不能使用bigint,因为它违背了目的

我遇到的另一个问题是,在做操作时,直到7号都很顺利。从8号开始,以此类推,如果不给我负数,它就不会继续下去。

for N=8应该是00002480158730158730158730。相反,我得到00002 48015 -19220 -41904 30331 53015 -19220

这显然是由于int的限制,因为在那部分它确实存在40320 % 1936000000得到a[3]的值,也就是35200,再乘以100000给我们一个3520000000/40320,虽然a[3]的值超过了整数的极限,有什么办法解决这个问题吗?我不能使用双精度或大整型,所以如果有人有解决这个问题的方法,我将不胜感激。

不能使用浮点型或bigint型,但是其他编译器固有的整型,如long long, unsigned long long等呢?为了使它显式,你可以使用<stdint.h>的int64_t和uint64_t(或<cstdint>的std::int64_t和std::uint64_t,尽管这个头还不是官方标准,但在许多编译器上都支持)。

我不知道这是否有任何用处,但您可以在这里找到我写的计算欧拉数的代码:http://41j.com/blog/2011/10/program-for-calculating-e/

32bit int限制为11!

  • 所以你必须存储所有上述事实除以一些数字
    • 12 !/10000
    • 13 !/10000
    • 当不适合时使用10000^2等等
  • 使用时,除法结果只是移到后面的四位小数…
  • 你当然不能除以1/n!
    • 上的整数将为零而不是除10000
    • 但是这限制了n!到9999,所以如果你想要更多,到处加零,结果是小数
  • 我也认为可能会有溢出,所以你也应该继续使用上面的数字

相关内容

  • 没有找到相关文章