Skip to Main Content

Java Programming

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Java calculates wrong?

807603Jan 20 2008 — edited Jan 22 2008
Hi,

I want to do some pretty long calculations in Jave but I've the problem that I'm getting wrong results. For testing I split a part the calculation and I got the right value. My question is, is it possible to get the correct results without having to split?

Here is the code before splitting:
public static Point equation(double x1, double y1, double x2, double y2, double d) {
    double s = Math.hypot(x1-x2, y1-y2);

    double x1p3 = x1*x1*x1;
    double x1p2 = x1*x1;
    double x2p3 = x2*x2*x2;
    double x2p2 = x2*x2;
    double y1p3 = y1*y1*y1;
    double y1p2 = y1*y1;
    double y2p3 = y2*y2*y2;
    double y2p2 = y2*y2;
    double sp2 = s*s;
    double dp2 = d*d;
    double x1p4 = Math.pow(x1, 4);
    double x2p4 = Math.pow(x2, 4);
    double sp4 = Math.pow(s, 4);
    double y1p4 = Math.pow(y1, 4);
    double y2p4 = Math.pow(y2, 4);
    double x1x2 = x1*x2;
    double y2y1 = y2*y1;
    double sd = s*d;

    double sqrt_x1_1 = -8*x1p3*x2*sp2-y1p4*x2p2+4*y2*y1p3*x1p2+4*y1p3*x2p2*y2-8*x1*x2p3*sp2-
            y1p4*x1p2-8*y1p3*x1x2*y2+2*y1p4*x1x2-y2p4*x2p2-y2p4*x1p2-2*
            x2p4*y2p2-2*x2p4*y1p2-2*y1p2*x1p4+20*x1p3*x2p3-15*x1p2*x2p4+6*
            Math.pow(x1,5)*x2+6*x1*Math.pow(x2,5)-15*x1p4*x2p2+2*x2p4*sp2-x2p2*sp4+4*
            x2p4*dp2+2*x1p4*sp2-x1p2*sp4+4*x1p4*dp2+8*sp2*y1*x1x2*y2+2*sp2*y1p2*x2p2+4*y2p2*y2y1*x2p2-6*y2p2*y1p2*x2p2+4*y2p2*y2y1*x1p2-6*y2p2*y1p2*x1p2+2*sp2*y1p2*x1p2+2*
            y2p4*x1x2+8*x2p3*y2p2*x1+4*x2p4*y2y1-12*x2p2*y2p2*x1p2+2*x2p2*y2p2*sp2+8*x1p3*x2*y2p2+8*x2p3*y1p2*x1-12*x2p2*y1p2*x1p2+4*y2*



            x1p4*y1+2*y2p2*x1p2*sp2+8*x1p3*x2*y1p2+12*x1p2*x2p2*sp2+2*x1x2*sp4+24*x1p2*x2p2*dp2-16*x1*x2p3*dp2-16*x1p3*x2*dp2+4*y2p2*dp2*x2p2+4*y2p2*dp2*x1p2-8*y2p2*y2y1*x1x2+8*x2p2*y2y1*sd+8*x1x2*y2p2*sd-16*x1x2*y2y1*sd-2*y2p2*
            x1p4+16*y2y1*dp2*x2*x1-8*y2p2*dp2*x2*x1-8*y1p2*dp2*x2*x1+8*y2*x1p2*y1*sd+8*y1p2*sd*x1x2-4*y1p2*sd*x1p2-8*x1x2*sp2*sd+8*x1x2*sp2*dp2+16*x1p3*x2*sd+16*x1*x2p3*sd-24*x1p2*x2p2*sd-8*y2y1*dp2*x2p2-8*y2y1*dp2*x1p2-
            Math.pow(x2,6)-Math.pow(x1,6)+12*y2p2*y1p2*x1x2-4*sp2*y1*x2p2*y2-4*sp2*y1*y2*x1p2-4*sp2*y1p2*x1x2-16*x2p3*y2*x1*y1-4*x2p2*y2p2*sd+24*x2p2*y2y1*x1p2-16*x1p3*x2*y2y1-4*x1x2*y2p2*sp2-4*x2p2*y1p2*sd-4*y2p2*x1p2*sd+4*y1p2*dp2*x2p2+4*y1p2*dp2*x1p2+4*x2p2*sp2*sd-4*x2p2*sp2*dp2-4*
            x2p4*sd+4*x1p2*sp2*sd-4*x1p2*sp2*dp2-4*x1p4*sd;
And after splitting:
double sqrt_x1_1_1 = -8*x1p3*x2*sp2-y1p4*x2p2+4*y2*y1p3*x1p2+4*y1p3*x2p2*y2-8*x1*x2p3*sp2-
            y1p4*x1p2-8*y1p3*x1x2*y2+2*y1p4*x1x2-y2p4*x2p2-y2p4*x1p2-2*
            x2p4*y2p2-2*x2p4*y1p2-2*y1p2*x1p4+20*x1p3*x2p3-15*x1p2*x2p4+6*
            Math.pow(x1,5)*x2+6*x1*Math.pow(x2,5)-15*x1p4*x2p2+2*x2p4*sp2-x2p2*sp4+4*
            x2p4*dp2+2*x1p4*sp2-x1p2*sp4+4*x1p4*dp2+8*sp2*y1*x1x2*y2+2*sp2*y1p2*x2p2+4*y2p2*y2y1*x2p2-6*y2p2*y1p2*x2p2+4*y2p2*y2y1*x1p2-6*y2p2*y1p2*x1p2+2*sp2*y1p2*x1p2+2*
            y2p4*x1x2+8*x2p3*y2p2*x1+4*x2p4*y2y1-12*x2p2*y2p2*x1p2+2*x2p2*y2p2*sp2+8*x1p3*x2*y2p2+8*x2p3*y1p2*x1-12*x2p2*y1p2*x1p2+4*y2;
    double sqrt_x1_1_2 = x1p4*y1+2*y2p2*x1p2*sp2+8*x1p3*x2*y1p2+12*x1p2*x2p2*sp2+2*x1x2*sp4+24*x1p2*x2p2*dp2-16*x1*x2p3*dp2-16*x1p3*x2*dp2+4*y2p2*dp2*x2p2+4*y2p2*dp2*x1p2-8*y2p2*y2y1*x1x2+8*x2p2*y2y1*sd+8*x1x2*y2p2*sd-16*x1x2*y2y1*sd-2*y2p2*
            x1p4+16*y2y1*dp2*x2*x1-8*y2p2*dp2*x2*x1-8*y1p2*dp2*x2*x1+8*y2*x1p2*y1*sd+8*y1p2*sd*x1x2-4*y1p2*sd*x1p2-8*x1x2*sp2*sd+8*x1x2*sp2*dp2+16*x1p3*x2*sd+16*x1*x2p3*sd-24*x1p2*x2p2*sd-8*y2y1*dp2*x2p2-8*y2y1*dp2*x1p2-
            Math.pow(x2,6)-Math.pow(x1,6)+12*y2p2*y1p2*x1x2-4*sp2*y1*x2p2*y2-4*sp2*y1*y2*x1p2-4*sp2*y1p2*x1x2-16*x2p3*y2*x1*y1-4*x2p2*y2p2*sd+24*x2p2*y2y1*x1p2-16*x1p3*x2*y2y1-4*x1x2*y2p2*sp2-4*x2p2*y1p2*sd-4*y2p2*x1p2*sd+4*y1p2*dp2*x2p2+4*y1p2*dp2*x1p2+4*x2p2*sp2*sd-4*x2p2*sp2*dp2-4*
            x2p4*sd+4*x1p2*sp2*sd-4*x1p2*sp2*dp2-4*x1p4*sd;

    sqrt_x1_1 = sqrt_x1_1_1*sqrt_x1_1_2; 
thx,
Imon
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Feb 19 2008
Added on Jan 20 2008
41 comments
718 views