从等式中显示错误的值

时间:2017-01-15 14:37:14

标签: android math

我正在尝试实施以下等式,但没有显示确切的值。

假设data1到data9的值是:5,1,1,1,1,1,3,1,1,y的值将是2。 但显示null.original equation链接:https://www.researchgate.net/publication/303232034_Mathematical_Model_Development_to_Detect_Breast_Cancer_Using_Multigene_Genetic_Programming

 double term3 =Math.cos(Math.log10(data7))/(data6+data7-6.419);



double y=0.05321*Math.log10(Math.exp(data2-1.0*Math.sin(Math.cos(data8))+Math.cos(data6)-(1.0*data6)/(data1*data3*data9*Math.sin(data8)*Math.tanh(data8))))-1.573*Math.sin(Math.sqrt(data4+data6+term3))
            -0.07468*Math.sin(Math.exp(data2*data9))
            -0.9181*Math.log10(2.0*data4+data6+Math.sin(Math.tanh(data7)+5.626*data4*data9)+Math.sin(Math.sin(Math.sin(data8)))
            +Math.sin(Math.sin(2.0*data6-7.128))+(Math.cos(data4)/(data6+data7-6.649))+(Math.cos(data4)/(data6+data7-6.634))+(Math.cos(data4)/(data4*(2.0*data6-1.479))))
            +0.2919*Math.sin(Math.sin(Math.cos(data2+data5+data8)/data2+data7-6.76))
            -0.07468*Math.sin(Math.sqrt(2.0*data4+data7-1.0*Math.sqrt(data6)))
            -0.07468*Math.sin(data6)-((5.381*Math.pow(10, 15)*Math.cos(Math.sqrt(data2*Math.pow(data3, 2))))/(7.206*Math.pow(10, 16)*data3+7.206*Math.pow(10, 16)*data5-4.934*Math.pow(10, 17)))
            -((5.381*Math.pow(10, 15)*Math.cos(Math.sqrt(data1*data3*data4)))/(7.206*Math.pow(10, 16)*data5+Math.sqrt(Math.tanh(data7))*(data7-1.0*data4+7.206*Math.pow(10, 16)*Math.cos(data6))-4.836*Math.pow(10, 17)))
            +((5.258*Math.pow(10, 15)*Math.cos(data4))/(1.801*Math.pow(10, 16)*data2+1.801*Math.pow(10, 16)*data7-1.2*Math.pow(10, 17)))
            +(0.4014*Math.cos(data6+data7)+Math.sqrt(data7+5.446))/((data5+Math.log10(data1)-6.585)*(Math.log10(data7)-1.0*Math.tanh(data5)-5.646*data4*data9)
            +Math.sqrt(Math.tanh(data8))*(data7-1.0*data4+Math.cos(data6))+data2*Math.pow(data4, 2)*Math.cos(data2)*Math.cos(data6))-0.003903*data1*Math.cos(Math.sqrt(data2+data4+data6-1.0*Math.sqrt(data4)))*(
            3.057*data1+2.0*data2-1.0*data4+data6+data7+data9+Math.cos(6.478*data6)+Math.cos(data6)-1.0*Math.sqrt(data1*data3*data6)-6.419)+((0.2919*Math.cos(Math.sqrt(data1*data3*data6)))/(2.0*data6-7.218)*(data5+data7-6.76))+5.235;

y的值必须是2或4。但它不会插入if else条件

int x= (int) y;

       if(x==2 )
       {
           condition="B";
           Toast.makeText(getApplicationContext(),"value of x is "+x,Toast.LENGTH_LONG).show();
       }
        else if(x==4)
       {
           condition="M";
           Toast.makeText(getApplicationContext(),"value of x is "+x,Toast.LENGTH_LONG).show();
       }

无法理解问题出在哪里....请帮助...

1 个答案:

答案 0 :(得分:3)

由于ydouble,计算极不可能恰好给出2或4.可能发生的事情是y小于2或4当第一个条件失败时。

您可以尝试使用y,而不是直接将int投射到long x = Math.round(y);。或者(也许更好),只需检查Math.abs(y - 2)Math.abs(y - 4)是否小于某个小阈值(例如.0001),以便考虑可能的舍入错误。