ситуация драматическая ... Мне нужно решить эту проблему в течение 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 и значения ускорения в массиве и выполнить расчет вне списка. Нет результата.
- Преобразовать число с плавающей точкой в двойное, без результата.
- Многие другие способы
P.S. Эта проблема возникает только для resultVec[0]
и resultVec[1]
, вместо этого resultVec[2]
хорошо рассчитано.