JavaScript メソッドがあり、これを標準の Java に変換する必要がありますが、行に少し問題があります。
if (jsum) sum += bj;
jsum=!jsum;
と
return x < 0.0 && (n & 1) ? -ans : ans;
それはエラーを示しています:演算子は undefinedです。Java でこの構文を使用できないことはわかっていますが、元の目的を問題なく維持するために使用する正しい構文を理解していません。
完全なJSメソッドは
function bessel_fkb(n,x)
{
if (n == null || n.length == 0) return "n not specified";
var iac = 40.0;
var bigno = 1.0e10;
var bigni = 1.0e-10;
var j,jsum,m,ax,bj,bjm,bjp,sum,tox,ans;
ax=Math.abs(x);
if (ax == 0.0) return 0.0;
else if (ax > n) {
tox = 2.0/ax;
bjm=BesselJ0(ax);
bj=BesselJ1(ax);
for (j=1;j<n;j++) {
bjp=j*tox*bj-bjm;
bjm=bj;
bj=bjp;
}
ans=bj;
} else {
tox=2.0/ax;
if (Math.sqrt(iac*n) >= 0)
m=2*((n + Math.floor(Math.sqrt(iac*n))) / 2);
else
m=2*((n + Math.ceil(Math.sqrt(iac*n))) / 2);
jsum=0;
bjp=ans=sum=0.0;
bj=1.0;
for (j=m;j>0;j--) {
bjm=j*tox*bj-bjp;
bjp=bj;
bj=bjm;
if (Math.abs(bj) > bigno) {
bj *= bigni;
bjp *= bigni;
ans *= bigni;
sum *= bigni;
}
if (jsum) sum += bj;
jsum=!jsum;
if (j == n) ans=bjp;
}
sum=2.0*sum-bj;
ans /= sum;
}
return x < 0.0 && (n & 1) ? -ans : ans;
}
私の完全なJava変換の試みは次のとおりです。
public double bessel_fkb(double n, double x)
{
double iac = 40.0;
double bigno = 1.0e10;
double bigni = 1.0e-10;
double jsum,m,ax,bj,bjm,bjp,sum,tox,ans;
ax=Math.abs(x);
if (ax == 0.0) return 0.0;
else if (ax > n) {
tox = 2.0/ax;
bjm=BesselJ0(ax);
bj=BesselJ1(ax);
for (int j=1;j<n;j++) {
bjp=j*tox*bj-bjm;
bjm=bj;
bj=bjp;
}
ans=bj;
} else {
tox=2.0/ax;
if (Math.sqrt(iac*n) >= 0)
m=2*((n + Math.floor(Math.sqrt(iac*n))) / 2);
else
m=2*((n + Math.ceil(Math.sqrt(iac*n))) / 2);
jsum=0;
bjp=ans=sum=0.0;
bj=1.0;
for (int j=(int)m;j>0;j--) {
bjm=j*tox*bj-bjp;
bjp=bj;
bj=bjm;
if (Math.abs(bj) > bigno) {
bj *= bigni;
bjp *= bigni;
ans *= bigni;
sum *= bigni;
}
if (jsum) sum += bj;
jsum=!jsum;
if (j == n) ans=bjp;
}
sum=2.0*sum-bj;
ans /= sum;
}
return x < 0.0 && (n & 1) ? -ans : ans;
}