2013-07-31 5 views
0

У меня есть вектор-столбец pp заполненных цифры, например:Matlab: найти позицию последнего ненулевого цифры номера

23.234000 
3.1237340 
4.4359000 

Я хочу, чтобы найти количество мест справа от десятичного, что наименьшая ненулевая цифра в векторе, которая в этом случае должна быть 6, из-за 4 в 3.123734. Затем я хочу умножить каждое число в векторе на 10^6, чтобы избавиться от всех десятичных знаков в векторе. Я хочу сделать это, чтобы устранить ошибки округления. Каков наилучший способ сделать это?

+1

Можете ли вы более подробно описать, что вы подразумеваете, устраняя ошибки округления? Потому что это округление ошибок, которые заставили бы меня сказать, что это невозможно сделать. Откуда вы знаете, что '3.1237340' на самом деле' 3.12373400000000000009884'? – Dan

+1

Я согласен с Дэном в представлении float/double, любые числа просто ближе всего к тому, что машина может представлять. Количество значимых цифр действительно является важным фактором, умножая все на 1.0e6, на самом деле не меняет точности. – radarhead

+1

приведены некоторые примеры, почему вы должны быть осторожны с плавающими числами в двоичной системе: [TMW: числа с плавающей запятой] (http://www.mathworks.de/de/help/matlab/matlab_prog/floating- точка-numbers.html) –

ответ

2

Фактическое значение может отличаться от фактического от MATLAB. Например, рассмотрим следующий пример:

>> x = 1.4 - [0.1; 0.09999999] 

x = 
    1.3000 
    1.3000 

MATLAB показывает оба значения, чтобы быть 1.3, но на самом деле, ни один из них не является:

>> x - 1.3 

ans = 
    -2.2204e-16 
    1.0000e-08 

Мое предложение поэтому принять решение о фиксированной точности (скажем, 6 цифр), а затем умножить на соответствующую мощность 10.

Смежные вопросы