あなたが話しているのは、数字の代わりに円周率を概念として使用することです。私はこのようなことをします:
class Fraction {
public int num;
public int den;
public Fraction(int n,int d) {
num=n;
den=d;
}
public Fraction() {
num=1;
den=1;
public double decValue() {
return ((double)num)/((double)den);
}
}
ヤッダ、ヤッダ....
public static Fraction someMethod(double decVal) {
Fraction f=new Fraction(1,1);
double howclose=0.0000001; //tiny amount of error allowed
while(abs((f.decValue()*Math.PI)-decVal)>howclose) {
if(f.decValue()*Math.PI>decVal) {
f.den++;
}
else {
f.num++;
}
}
return f;
}
基本的に、分数を期待される答え(decVal)にどんどん近づけるように作業します。分数は次の形式になります。
num*PI
------
den
基本的に、結果に含まれる分数にPiを掛けると、decValに非常に近くなるはずです。