D
D
Denis2016-05-24 01:22:39
Mathematics
Denis, 2016-05-24 01:22:39

What accuracy should be in order to avoid an error in the recalculation?

Hello.
There is a task.
There is a total amount - Sum.
Sum = amount[0] + amount[1] + ... + amount[n]
All amount[i] data (accuracy to two digits), converted to percentages:
percent[i] = amount[i] * 100 / Sum .
I get a list of data that stores these percentages, with an accuracy of two decimal places: 5.26, 5.26, etc.
Based on this data, the amount for each percentage is calculated (i.e. backward calculation):
amount[i] = (Sum * percent[i]) / 100
What accuracy should be in percentage data in order to obtain correct quantitative data (with backward conversion), rounded to two decimal places?
It seems to me that there should be some kind of theorem or document about this.
Thanks in advance.

Answer the question

In order to leave comments, you need to log in

6 answer(s)

О какой точности речь, если везде точность указана и так?

X
xmoonlight, 2016-05-24
@xmoonlight

Если речь про деньги/суммы - точность до 4-х знаков с математическим округлением: 5-й знак (после запятой): 0-4 => вниз, 5-9 => вверх:
(примеры: 0.12342378463 => 0.1234; 0.123498734638 => 0.1235)
Если речь идёт про количество, то тут явно отсутствует параметр price[i].
Проще считать имея цену и кол-во каждой позиции.

Василий, 2016-05-24
@Foolleren

в делфи для работы с деньгами есть специальный тип Currency имеет 4 знака после запятой с обычным округлением

E
evgeniy_lm, 2016-05-24
@evgeniy_lm

Точность значения должна быть максимально возможной (8 знаков для Double). Сколько из этих знаков увидит пользователь это уже другая история

S
Sumor, 2016-05-25
@Sumor

Ну для начала если у вас слагаемые amount имеют точность 0,01, то сумма (в предельном случае) будет иметь точность до 0,01*N, где N - количество слагаемых. У нас конечно есть центральная предельная теорема, которая говорит, что в среднем худшего случая не будет и матожидание суммы будет сумма слагаемых, но всё равно точность суммы будет хуже (больше), чем 0,01.
Производя операцию
percent[i] = amount[i] * 100 / Sum
amount[i] имеет точность 0,01, Sum - 0,01*N
Считаем точность вычислений percent: она получается от 0,01*100/(Sum + 0,01*N) до 0,01*100/(Sum - 0,01*N)
Если пренебречь точностью Sum, и сумма у вас меньше 100, то погрешность будет точно больше 0,01 - отсюда несовпадение обратных преобразований.
Методика тут указана примерная, насколько я помню математическое образование :)
Точность в данном случае немного неверный термин. Ищите по словосочетанию "расчёт погрешности"

Михаил, 2016-05-25
@zuzuzu

but empirically you can't? Well, two or three digits increase the accuracy for%. And you should quickly come to what you are looking for.
So you would already use 3 decimal places and everything would be good.
In general, I observe a relationship between the number of digits on the left in the "big" number and the number of required digits in% to restore the desired number. The connection is direct - the percent should have as many digits as you have the digits of the "big" number.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question