Rabu, 04 Agustus 2010

Fungsi Matematika yang tidak ada di Java mobile

Dear teman2, mau share nih. saya dan teman2 sedang mengerjakan applikasi mementukan waktu sholat 5 waktu + imsyak pada blackberry. ada kendala buanyak sekali yang didapat. salah satunya adalah beberapa fungsi matematika ternyata pada java mobile ada beberapa fungsi yang tidak mendukung salah lima-nya adalah acos, asin, atan, atan2 dan pow, nah setelah nyari resourses di internet dan nanya beberapa teman dan saya kumpulkan dalam 1 class berukut cuplikan codingnnya.. mudah-mudahan bermanfaat


public class Mmath {

// constants
static final double sq2p1 = 2.414213562373095048802e0;
static final double sq2m1 = .414213562373095048802e0;
static final double p4 = .161536412982230228262e2;
static final double p3 = .26842548195503973794141e3;
static final double p2 = .11530293515404850115428136e4;
static final double p1 = .178040631643319697105464587e4;
static final double p0 = .89678597403663861959987488e3;
static final double q4 = .5895697050844462222791e2;
static final double q3 = .536265374031215315104235e3;
static final double q2 = .16667838148816337184521798e4;
static final double q1 = .207933497444540981287275926e4;
static final double q0 = .89678597403663861962481162e3;
static final double PIO2 = 1.5707963267948966135E0;
static final double nan = (0.0/0.0);
// reduce
private static double mxatan(double arg)
{
double argsq, value;

argsq = arg*arg;
value = ((((p4*argsq + p3)*argsq + p2)*argsq + p1)*argsq + p0);
value = value/(((((argsq + q4)*argsq + q3)*argsq + q2)*argsq + q1)*argsq + q0);
return value*arg;
}

// reduce
private static double msatan(double arg)
{
if(arg <> sq2p1)
return PIO2 - mxatan(1/arg);
return PIO2/2 + mxatan((arg-1)/(arg+1));
}

// implementation of atan
public static double atan(double arg)
{
if(arg > 0)
return msatan(arg);
return -msatan(-arg);
}

// implementation of atan2
public static double atan2(double arg1, double arg2)
{
if(arg1+arg2 == arg1)
{
if(arg1 >= 0)
return PIO2;
return -PIO2;
}
arg1 = atan(arg1/arg2);
if(arg2 < sign =" 0;" arg =" -arg;"> 1)
return nan;
temp = Math.sqrt(1 - arg*arg);
if(arg > 0.7)
temp = PIO2 - atan(temp/arg);
else
temp = atan(arg/temp);
if(sign > 0)
temp = -temp;
return temp;
}

// implementation of acos
public static double acos(double arg)
{
if(arg > 1 || arg < -1) return nan; return PIO2 - asin(arg); } // pow menggantikan fungsi matematika untuk power atau perpangkatan di java mobile yang biasa digunakan oleh //fungsi Math.pow public static double pow(final double a, final double b) { final int x = (int) (Double.doubleToLongBits(a) >> 32);
final int y = (int) (b * (x - 1072632447) + 1072632447);
return Double.longBitsToDouble(((long) y) <<>

Tidak ada komentar:

Posting Komentar