ситуация драматическая... Я должен решить эту проблему уже 5 дней, и я не могу выбраться.
Проблема: простая операция как продукта всегда дает неверный результат. Почему?
Выдержка из кода:
//all vars are float
// resultVec is a vector [3]
// Rs is a vector [3]
// accelerationvalues is a vector [3]
resultVec[0]=Rs[0]*accelerationvalues[0]+Rs[1]*accelerationvalues[1]+Rs[2]*accelerationvalues[2];
//debug to print result
Log.d("e", "("+Rs[0]+")*("+accelerationvalues[0]+")+("+Rs[1]+")*("+accelerationvalues[1]+")+("+Rs[2]+")*("+accelerationvalues[2]+")="+(resultVec[0]));
И это результат Log Cat: Но вы можете просто попробовать, что это неправильно: поиск по Google
(0.040147018)*(-0.9942854)+(0.9984244)*(-0.32688835)+(0.039202508)*(9.343558)
И вы обнаружите, что истинный результат 8,67678679 × 10-9 сильно отличается от другого. Эта ошибка повторяется всегда, когда я запускаю программу, некоторое время разница знак тоже!
В чем проблема?
Я пробовал все пути, чтобы решить эту проблему! (некоторые из них размещены ниже):
Вы можете найти полный исходный код здесь.
- сохранить Rs и значения ускорения в массиве и выполнить расчет вне листнера. Безрезультатно.
- Преобразовать float в double, безрезультатно.
- Многие другие способы
P.S. Эта проблема возникает только для resultVec[0]
и resultVec[1]
, вместо этого resultVec[2]
хорошо вычисляется.
float
, знаете ли вы, что точность составляет всего 7 значащих цифр? - person Jon Skeet   schedule 07.11.2011resultVec[0]
иresultVec[1]
, а дляresultVec[2]
НИКОГДА? - person Lork   schedule 07.11.2011(double) var
для преобразования, не так ли? проверьте также мой предварительный комментарий - person Lork   schedule 07.11.2011