:: Visual Foxpro, Foxpro for DOS
Об округлениях
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Не уверен, что тема для этого форума, но тем не менее.

Пусть имеется рациональное число А, хранящееся в числовом поле с 2-мя знаками после запятой. Также имеется некий переменный коэффициент К с числом знаков после запятой до четырёх.

Вопрос заключается в следующем. Сколько надо иметь знаков после запятой для числа B, вычисляемого как отношение числа А к коэффициенту K, чтобы гарантированно получать число А при умножениии числа B на коэффициент K? И ещё. Насколько часто будет возникать погрешность, если число B хранить с 2 или 3 знаками после запятой? От чего будет зависеть такая погрешность?

Пример.

m.a=20.45
m.k=2.65
m.b=round(m.a/m.k,2)
?round(m.b*m.k,2)-m.a
0.01
Ratings: 0 negative/0 positive
Re: Об округлениях
leonid

Сообщений: 3204
Откуда: Рига
Дата регистрации: 03.02.2006
Извиняюсь, ответил не подумав.

Число необходимых знаков зависит от m.k. Достаточто будет int(log(m.k)/log(10))+3. Ну, если тройку заменить на 4, то точно.



Исправлено 2 раз(а). Последнее : leonid, 12.04.20 11:39
Ratings: 0 negative/0 positive
Re: Об округлениях
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Спасибо! Ответ понятен.

Таким образом, хранить число А нет смысла, поскольку число B не может иметь более 2 знаков после запятой. Поскольку мне известен способ получения числа B другим способом, то буду хранить число В, а число А будет получаться так:

m.a=round(m.b*m.k,2)
Ratings: 0 negative/0 positive
Re: Об округлениях
leonid

Сообщений: 3204
Откуда: Рига
Дата регистрации: 03.02.2006
Боюсь, Вы не поняли. Число знаков у В после запятой не имеет ни малейшего значения.
Ratings: 0 negative/0 positive
Re: Об округлениях
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Коэффициент m.k принимает значения в диапазоне от 1 до 3.

Почему число знаков после запятой для числа B не имеет значения, действительно непонятно.
Ratings: 0 negative/0 positive
Re: Об округлениях
leonid

Сообщений: 3204
Откуда: Рига
Дата регистрации: 03.02.2006
Simple777
Коэффициент m.k принимает значения в диапазоне от 1 до 3.

Если бы Вы сразу это написали, я бы Вам сразу написал, что хранить у результата 4 знака после запятой вполне хватит.
Ratings: 0 negative/0 positive
Re: Об округлениях
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Только вот хранить стоимостные характеристики с 4 знаками после запятой никак "не с руки".
Ratings: 0 negative/0 positive
Re: Об округлениях
Igor Korolyov
Автор

Сообщений: 34580
Дата регистрации: 28.05.2002
Тип currency предназначенный для хранения "денежных" величин имеет именно 4 знака после запятой. Правда это на самом деле целочисленный тип (просто смещённый на 4 позиции). Ну и да, помимо вопроса о "значности" очень важен и вопрос о правильном округлении...


------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 30 TAS  (Гостей: 29)

© 2000-2024 Fox Club 
Яндекс.Метрика