2013-03-24 87 views
1

任何人都可以向我解釋爲什麼speed計算關閉?
這是一個浮點計算。我在日誌中顯示(下面)涉及的所有因素。
根據我的手計算器:Android漂浮點乘法因子0.004739

長度:SQRT(3.497924^2 +(-1.134711)^ 2)= 3.67736881
速度:1.05 * 3.67736881 = 3.86123725

這是關通過一個因子4.739 10^-3從印刷結果3.879624

的代碼:

 float factor = yTouch(paddle, ballBounds); 
     float speed = SPEED_TRANSFER[level] * PointF.length(mSpeed.x, mSpeed.y); 
     double alpha = Math.PI/2; 
     double beta = Math.atan2(mSpeed.y, mSpeed.x); 
     double tau = -(2*alpha+beta); 
     Log.v("debug", String.format("speed(%f) mSpeed(%f,%f) transfer(%2.2f) 
      length(%f) Original tau(%3.2f)", speed, mSpeed.x, mSpeed.y, 
      SPEED_TRANSFER[level], PointF.length(mSpeed.x, mSpeed.y), tau/Math.PI)); 

日誌:

03-24 10:48:53.421: V/debug(3236): speed(3.879624) mSpeed(3.497924,-1.134711) transfer(1.05) length(3.677369) Original tau(-0.90) 

編輯
這個我試過,直接乘法是正確的。

Log.v("debug", "Direct multiplication:" + (1.05f * 3.677369f)); 

03-24 11:49:08.687: V/debug(7644): Direct multiplication:3.8612373 
+0

你確定你的代碼中的SPEED_TRANSFER [level] = 1.05和PointF.length(mSpeed.x,mSpeed.y)= 3.67736881的值嗎?你有沒有嘗試記錄它? – 2013-03-24 09:45:18

+0

@NAYOSO在日誌打印中,向右滾動 – ilomambo 2013-03-24 09:47:12

+0

這是多線程的嗎? 'mSpeed'在計算'speed'和你的Log線之間改變?另外,如果你將'factor'和'speed'聲明爲'double',它有什麼區別嗎? – mtrw 2013-03-24 09:48:39

回答

1

你能在日誌行中打印更多SPEED_TRANSFER[level]的數字嗎?您在小數點後第三位查看錯誤,但只顯示其中一個因素的兩個位置。例如,如果SPEED_TRANSFER[level] == 1.055的結果是正確的(儘管我預計這會在日誌行中打印爲1.06,但那是另一回事)。