mathe 发表于 2010-8-23 11:08:14

${49+23*sqrt(75)}/79$
如果限定b=1,结果为
${54+sqrt(78)}/20$

wayne 发表于 2010-8-23 12:08:40

:b:,咋算的

mathe 发表于 2010-8-23 12:42:16

穷举,改成3位数可以达到
${66+68*sqrt(789)}/629$不过就有点慢了
#include <stdio.h>
#include <math.h>
#define MAX 999
int main()
{
    int a,b,c;
    double berr=10.0;
    int ba,bb,bc,bd;
    for(a=0;a<=MAX;a++)for(b=-MAX;b<=MAX;b++)for(c=0;c<=MAX;c++){
      double e=a+b*sqrt(c);
      double f=e/M_PI;
      int d=(int)ceil(f);
      if(-MAX<=d&&d<=MAX){
            double err=fabs(e/d-M_PI);
            if(err<berr){
               berr=err;ba=a;bb=b;bc=c;bd=d;
            }
      }
      d=(int)floor(f);
      if(-MAX<=d&&d<=MAX){
            double err=fabs(e/d-M_PI);
            if(err<berr){
               berr=err;ba=a;bb=b;bc=c;bd=d;
            }
       }
    }
    printf("(%d+%d*sqrt(%d))/%d:err %g\n",ba,bb,bc,bd,berr);
}

wayne 发表于 2010-8-23 12:44:04

在理论上有没有可以分析的余地呢

wayne 发表于 2010-8-23 12:52:48

我感觉超越数是一个很大的盲区,似乎很少有这方面的研究。
总感觉 能在超越数的幂 的线性组合(权是整数)中找出名堂来

wayne 发表于 2010-8-23 13:18:26

13# mathe

可以用floor(d+0.5)来实现 round 函数的功能,:victory:

wayne 发表于 2010-8-23 13:25:51

错了,有点乱,:L

zgg___ 发表于 2010-8-23 14:26:31

本帖最后由 zgg___ 于 2010-8-23 14:33 编辑

用代数数来逼近某个具体数值的方法是已有一定研究的,有兴趣可以了解一下传说中的LLL算法,Mathematica中是集成了这个算法的,大家可以敲入下面的话来试一试效果先……
<< NumberTheory`Recognize`
f = Recognize, 10, t]
N, 30] // MatrixForm
N

没——问题 发表于 2010-8-23 14:28:34

15# wayne
就连超越数之和是不是超越数都很难证...

无心人 发表于 2010-8-23 15:11:33

${453 + 802*sqrt(1000)}/8217$
======================
我的精度比mathe的最后的那个高一点
呵呵
页: 1 [2] 3 4 5 6 7 8 9
查看完整版本: 用代数数逼近π