2017-01-15 13 views
3

次の式を実装しようとしていますが、正確な値は表示されません。は式から間違った値を示しています

DATA9にDATA1の値を仮定は、次のとおり5,1,1,1,2,1,3,1,1およびyの値は2 しかしnull.original式リンクを示すのであろう。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の値が、問題がどこにあるか理解望めない場合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(); 
     } 

にinteringされていない.but 2または4のいずれかでなければなりません....助けてください.. 。

+0

すべてのintが正しいかどうかは確かです。 – W4R10CK

+0

xとyの値は何ですか? –

答えて

3

ydoubleなので、計算では2〜4となる可能性は非常に低いです。おそらく起きているのは、yが最初の条件が満たされないときに2または4よりも少し小さいことです。

yを直接intにキャストする代わりに、long x = Math.round(y);を試してみることができます。あるいは、おそらくより良い丸め誤差を許容するために、Math.abs(y - 2)またはMath.abs(y - 4)がいくつかの小さなしきい値(たとえば、.0001)よりも小さいことを確認してください。

+0

彼はintにキャストしています。だから、本当に彼はx = [2.0,2.999999999]かx = [4.0,4.999999999]かどうかをチェックしています。だから、トップエンドではあまりにも容認しすぎるかもしれません(1.999999999は失敗しますが、基本的には2です)。 –

+0

@GabeSechan - まったく。だから私は、問題は、 'y'が2または4より小さい小さなビットで終わっているということです(いずれかが' if'と 'else'分岐の両方を失敗させるでしょう)。 –

関連する問題