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的最后的那个高一点
呵呵