Правила округлення. Яке округлення застосовувати до xml. Як округлює ГІС

Програми, які допомагають нам у роботі. Бажаєте рекламувати свій бізнес? Ставайте сонсором вказаного розділу.
Правила форуму
Будьте уважними! Перед створенням теми перечитайте Правила форуму і ще раз перевірте, чи дана тема не існує. Теми, які дублюють інші, видаляються без попередження! Повідомлення, які містять не прихований адрес E-mail, видаляються без попередження!

0
Немає голосів
 
Всього голосів: 0

Аватар користувача
NickS
Спец
Спец
Повідомлень: 1150
З нами з: 07 квітня 2008 15:09
Репутація: 187
Область: Кіровоградська
Місце роботи: Інше
Контактна інформація:

Re: Правила округлення. Яке округлення застосовувати до xml. Як округлює ГІС

Повідомлення NickS »

doslidnik писав:БАГ №1. Площу ділянки приведеної в першому пості зберігає для in4, як 5.9613 для кварталу та угіддя, але для ділянки 5.9612. Нагадаю в налаштуваннях округлення координат треба ставити 4.
Це була бета-версія, для xml дану помилку виправили, а для in4 ще не встигли. В офіційній версії виправимо.
doslidnik писав: БАГ №2
Як буде округлювати ГІС6 числа XXX.7150 XXX.7250 XXX.7256 XXX.7156 до 2-х знаків?. Округлює по різному.
По-різному, бо, як я вже й пояснював, числа з одним і тим самим закінченням, при двійковому вигляді, мали різну похибку:
Число 4264962,7250 при зберіганні в числовому вигляді в пам'яті ПК зберігається як 4264962,724999999360000
Число 4188675.7250 при зберіганні в числовому вигляді в пам'яті ПК зберігається як 4188675,725000000000000
Можете це перевірити, наприклад в FastReport (це не наша розробка, це російський модуль для створення шаблонів документів, його використовує Digitals і ще де-які програми, якраз нехай хто в них працює, спробує і скаже результат). Для цього достатньо просто вивести число з великою точністю до 12-15 знака

Код: Виділити все

[FormatFloat('0.000000000000000', 4264962.7250)]
де '0.000000000000000' - точність до 15 знаків
4264962.7250 - наше число.
Дана функція просто форматує число до заданої точності.

От якраз через це, стандартна функція заокруглення в Delphi працює не по-різному, як сказав doslidnik, а цілком логічно, округлюючи математичним способом:
4264962,724999999360 після заокруглення 4264962,72 (бо 4 попереду)
4188675,725000000000 після заокруглення 4264962,73 (бо 5 попереду)

Якщо працювати завжди з однією точністю, то така комп'ютерна похибка не помітна. А якщо стрибати від однієї точності до іншої, то да, похибка буде впливати на кінцевий результат. Зараз ми врахували її і зробили власну функцію заокруглення по типу бухгалтерського заокруглення (ще називається банківським, бо саме там воно вперше почало використовуватись, round-half-even), так як він максимально підходить для роботи з площами.
Для тих, хто погано вчився, поясню. :) Якщо цифра справа, перед якою потрібно заокруглити, менше 5, то ліва цифра не змінюється, якщо цифра справа більше 5, то ліва цифра збільшується на одиницю. Якщо цифра справа рівна 5, а ліва - парна - не змінюється, якщо ліва - не парна, то збільшується на одиницю. Також враховується друга права цифра, для компенсації.
Для кращого розуміння цього заокруглення, дивіться таблицю, де заокруглення йде до цілого числа:

Код: Виділити все

0.5  - 0
0.55 - 1
1.5  - 2
1.55 - 2
2.5  - 2
2.55 - 3
3.5  - 4
3.55 - 4
4.5  - 4
4.55 - 5
5.5  - 6
5.55 - 6
6.5  - 6
6.55 - 7
7.5  - 8
7.55 - 8
8.5  - 8
8.55 - 9
9.5  - 10
9.55 - 10
Дані зміни внесли в бета-версії 6.1.4.3. Бажаючі можуть потестувати. :)
doslidnik
Спец
Спец
Повідомлень: 810
З нами з: 28 липня 2009 19:47
Репутація: 102
Область: Київська
Місце роботи: Інше

Re: Правила округлення. Яке округлення застосовувати до xml. Як округлює ГІС

Повідомлення doslidnik »

Программа має округлювати будь-де однаково і за зрозумілими людині параметрами. Дійшли до висновку round-half-even, тоді зробіть щоб будь де це було round-half-even.
NickS писав:По-різному, бо, як я вже й пояснював, числа з одним і тим самим закінченням, при двійковому вигляді, мали різну похибку:
До чого тут подвійний вигляд, і при злитті у Word аналогічні проблеми бувають. Не зберігайте у двійковому форматі. Створіть свій власний тип данних. Не можете - храніть число як текст. Множте число на 10000000, а потім діліть його на 10000000. Пересічного користувача це має обходити. Виходить якщо в мене площа чи розмір ділянки буде 4264962.7250, або то її заокруглить так само не вірно.
NickS писав:Число 4264962,7250 при зберіганні в числовому вигляді в пам'яті ПК зберігається як 4264962,724999999360000
По вашому числа 4264962.725 існувати на комп'ютері не може впринципі? Чи не може існувати лише у Delfi?
NickS писав:[FormatFloat('0.000000000000000', 4264962.7250)]
А чому не робити так [FormatFloat('0.000000000000000',round('0.000000000000000', 4264962.7250))]???
Round(=round-half-even)) та Format працюють по різному, то чого ви застосовуєте 2-а різних округлення? От ви нарешті випадково і показали яке 2-е округлення ви застосовуєте.
NickS писав:Зараз ми врахували її і зробили власну функцію заокруглення по типу бухгалтерського заокруглення (ще називається банківським, бо саме там воно вперше почало використовуватись, round-half-even), так як він максимально підходить для роботи з площами.
Чи ви її використовуєте будь-де?
Якщо не важко пройдіть пошуком по коду та знайдіть усі місця де використовується Round та Format та замініть її round-half-even. А то буде як із ин4. Ви ж розумієте такі помилки помітити дуже важко не маючи доступу до коду та не розуміючи що, коли та як округлюється.
Аватар користувача
NickS
Спец
Спец
Повідомлень: 1150
З нами з: 07 квітня 2008 15:09
Репутація: 187
Область: Кіровоградська
Місце роботи: Інше
Контактна інформація:

Re: Правила округлення. Яке округлення застосовувати до xml. Як округлює ГІС

Повідомлення NickS »

doslidnik
Життя - складна штука. morgny І якби все так було класно і легко як Ви описуєте, на світі був би рай, всі були б мільйонерами та ніколи б не хворіли. lol2
doslidnik
Спец
Спец
Повідомлень: 810
З нами з: 28 липня 2009 19:47
Репутація: 102
Область: Київська
Місце роботи: Інше

Re: Правила округлення. Яке округлення застосовувати до xml. Як округлює ГІС

Повідомлення doslidnik »

Nicks
Перечитайте це уважно. Проблема в программі, а не в комп'ютері.
Alex1977 писав: Я наверное вас сильно удивлю. Но Excel не хранит значения числовых ячеек в виде строки. Числа сохраняются в оригинальном представлении без конвертации в строку. Excel использует вариантный тип, где кроме значения хранится также и тип переменной (строка, число, дата и т.д).

Проблема несоответствия двоичных и десятичных дробей (статья ссылку на которую вы давали) возникает только за границей точности используемого вещественного типа. Если не работать с очень большими или очень малыми числами и грамотно преобразовывать типы эта проблема не возникает.

Если вы записали в переменную типа Double число 5305488,72, то поверьте, в пределах точности данного типа переменная будет хранить именно это число. Если же вы по какой-то причине преобразовали вещественный тип меньшей точности в тип с большей точностью (например, Single в Double), тогда возможны ньюансы. Незначащие разряды меньшего по точности типа в некоторых случаях могут оказаться не инициализированы нулями.

Вывод. Не обвиняйте компьютер в своих ошибках. Он то точно ни в чем не виноват.

P.S. Читайте статьи, ссылки на которые даете.
Parcel
Спец
Спец
Повідомлень: 805
З нами з: 01 березня 2011 10:41
Репутація: 117
Область: Волинська

Re: Правила округлення. Яке округлення застосовувати до xml. Як округлює ГІС

Повідомлення Parcel »

doslidnik писав:NicksПеречитайте це уважно. Проблема в программі, а не в комп'ютері.
цитата NickSa про те, що
Число 4264962,7250 при зберіганні в числовому вигляді в пам'яті ПК зберігається як 4264962,724999999360000
Число 4188675.7250 при зберіганні в числовому вигляді в пам'яті ПК зберігається як 4188675,725000000000000
порве всі програмерські форуми morgny
Аватар користувача
NickS
Спец
Спец
Повідомлень: 1150
З нами з: 07 квітня 2008 15:09
Репутація: 187
Область: Кіровоградська
Місце роботи: Інше
Контактна інформація:

Re: Правила округлення. Яке округлення застосовувати до xml. Як округлює ГІС

Повідомлення NickS »

doslidnik писав:Nicks
Перечитайте це уважно. Проблема в программі, а не в комп'ютері.
facepalm
Для чого ексель і для чого ГІС? Які розрахунки там ведуться і які там? Ну набридло вже пояснювати, що Ви порівнюєте ферарі з белазом! У них різні функції. А вчити програмістів як і що писати, прицому тормозячи по-страшному в елементарних речах це да, у Вашому стилі. :) Це чукчі, які вчать негрів, як вести себе в спеку. Як мінімум Ви не уявляєте що таке база даних і навіщо вона потрібна, як зберігаються дані. Інформатику в школі прогулювали?
Parcel писав: цитата NickSa про те, що порве всі програмерські форуми morgny
Вам не зрозуміти її, не намагайтесь навіть. morgny
doslidnik
Спец
Спец
Повідомлень: 810
З нами з: 28 липня 2009 19:47
Репутація: 102
Область: Київська
Місце роботи: Інше

Re: Правила округлення. Яке округлення застосовувати до xml. Як округлює ГІС

Повідомлення doslidnik »

Nicks
Як ви не можете зрозуміти, що округлювати має за правилами, а не так як ВАМ заманеться.
NickS писав:прицому тормозячи по-страшному в елементарних речах це да
Наприклад. Я це лише за Вами весь час помічаю.
NickS писав:Як мінімум Ви не уявляєте що таке база даних і навіщо вона потрібна, як зберігаються дані
Уявляю.
NickS писав:Інформатику в школі прогулювали?
Ні, та навіть для закріплення ефекту закінчив вищу освіту у цьому напрямку.

Додано через 2 хвилини 58 секунд:
Не по темі
Позиция все дураки, только я умний конечно адекватна сервисной поддержке ГИС6. А зачем напрягаться у нас же есть наказ Держкомзему №306 від 01.08.2006
Додано через 4 хвилини 56 секунд:
Вам пишут про це Parcel, Alex1977, doslidnik, Chernov, але ви включили музику поголосніше та вдаєте що не чуєте.

Додано через 3 хвилини 45 секунд:
Alex1977 - це один із розробників Digitals.
Аватар користувача
NickS
Спец
Спец
Повідомлень: 1150
З нами з: 07 квітня 2008 15:09
Репутація: 187
Область: Кіровоградська
Місце роботи: Інше
Контактна інформація:

Re: Правила округлення. Яке округлення застосовувати до xml. Як округлює ГІС

Повідомлення NickS »

doslidnik
Ви ще довго нити будете чи таки прочитаєете що я писав вище? morgny Знаток інформатики... lol2
doslidnik писав:Додано через 3 хвилини 45 секунд:
Alex1977 - це один із розробників Digitals.
Чудово! Нехай оте що я написав про FastReport спробує в своїй програмі і скаже результат. Я чекаю. Krutelyk

Про що казав Chernov з чим я був не згоден? Ви читали його пости? А вдумувались?
Parcel такий же самый знаток як і Ви. morgny Які лише пишуть, але нічого не читають і не вдумуються в чужі слова.
doslidnik писав:
Не по темі
Позиция все дураки, только я умний конечно адекватна сервисной поддержке ГИС6.
В ГІС6 сама краща підтримка. Krutelyk Знаєте кращу чи це так, аби язиком ляпати? ;)
doslidnik
Спец
Спец
Повідомлень: 810
З нами з: 28 липня 2009 19:47
Репутація: 102
Область: Київська
Місце роботи: Інше

Re: Правила округлення. Яке округлення застосовувати до xml. Як округлює ГІС

Повідомлення doslidnik »

От тільки соплі розмазуєте, замість того щоб переробити ПО.

Додано через 19 хвилин 33 секунди:
NickS писав:Про що казав Chernov з чим я був не згоден?
Chernov писав:doslidnik написав:
зараз ГІС6 в одному та іншому випадку (показано на 1-му відео) ті самі закінчення чисел після коми округлюює по різному у різних ОФ.
дал
Alex1977 написав:
Если же вы по какой-то причине преобразовали вещественный тип меньшей точности в тип с большей точностью (например, Single в Double), тогда возможны ньюансы.
Где то программисты напутали опять же таки в модели данных. И они, скорее всего с благодарностью к Дослиднику в ближайшее время устранят зтот баг. Как любой программист поймет, к сожалению, далеко не последний... Как бы хороша ни была программа.
Менее вероятен вариант
Parcel написав:
і справа не в тому, який метод заокруглення ви використовуєте, а в тому, що ви використовуєте два різних методи
Цікаво коли ви свою охінею будете підтверджувати якимись цитатами?
Аватар користувача
NickS
Спец
Спец
Повідомлень: 1150
З нами з: 07 квітня 2008 15:09
Репутація: 187
Область: Кіровоградська
Місце роботи: Інше
Контактна інформація:

Re: Правила округлення. Яке округлення застосовувати до xml. Як округлює ГІС

Повідомлення NickS »

doslidnik писав:Цікаво коли ви свою охінею будете підтверджувати якимись цитатами?
Навіщо? Коли Ви всерівно не читаєте що я пишу. :)
Parcel
Спец
Спец
Повідомлень: 805
З нами з: 01 березня 2011 10:41
Репутація: 117
Область: Волинська

Re: Правила округлення. Яке округлення застосовувати до xml. Як округлює ГІС

Повідомлення Parcel »

NickS писав:Parcel такий же самый знаток як і Ви. morgny Які лише пишуть, але нічого не читають і не вдумуються в чужі слова.
Parcel і не претендує на звання "знатока", але він не полінувався і прочитав http://en.wikipedia.org/wiki/Floating_point і http://en.wikipedia.org/wiki/Double-pre ... int_format
чого і вам в свою чергу бажає, можливо після цього ви зрозумієте що вираз [FormatFloat('0.000000000000000', 4264962.7250)] не має ніякого смислу так як виходить за межу точності типу double, про що вам і писав Alex1977
doslidnik
Спец
Спец
Повідомлень: 810
З нами з: 28 липня 2009 19:47
Репутація: 102
Область: Київська
Місце роботи: Інше

Re: Правила округлення. Яке округлення застосовувати до xml. Як округлює ГІС

Повідомлення doslidnik »

Nicks
Ну як, не хочете привселюдно вибачитись та визнати свою неправоту?
Невже це треба було стільки сил прикласти щоб ви нарешті виправили свій БАГ. Вітаю вас з цим. Ви це зробили. vishenka

Після поверхневого тесту БАГів по округленню у ГІС6 бета 6.1.4.3 не бачу. Але це на перший погляд.
Якщо поставити точність до 9знака та більше, у вас все одно число 5252344.7250=5252344.724999999.
Тобто з моделями даних таки проблеми є. Цікаво. Невже у вас хтось користується більш ніж 8 знаками після коми при розрахунках.

Залишається надіятись, що проблема з округленням вирішена глобально в софті, а не просто залатана конкретна дірка.
Хотілось б більше не повертатись до цієї проблеми.

Тепер залишилось зробити метод округлення round-half-even офіційним, щоб знов не довелось перероблювати ПО.
Хоча, як по мені, більшості користувачів було б зручніше округлювати класично(як в школі), коли б округлювало 5 завжди у більшу сторону.
Parcel
Спец
Спец
Повідомлень: 805
З нами з: 01 березня 2011 10:41
Репутація: 117
Область: Волинська

Re: Правила округлення. Яке округлення застосовувати до xml. Як округлює ГІС

Повідомлення Parcel »

doslidnik писав: Тепер залишилось зробити метод округлення round-half-even офіційним, щоб знов не довелось перероблювати ПО.
Хоча, як по мені, більшості користувачів було б зручніше округлювати класично(як в школі), коли б округлювало 5 завжди у більшу сторону.
цікаво як округлюють "монстри гіса" - ArcGIS, Mapinfo?
doslidnik
Спец
Спец
Повідомлень: 810
З нами з: 28 липня 2009 19:47
Репутація: 102
Область: Київська
Місце роботи: Інше

Повідомлення doslidnik »

Версія ГІС 6.1.4.7.
Приплили до того самого.
Приклад in4. Копіюємо прихований текст в "notepad" та зберігаємо з розширенням in4.
Округленя координат в ГІС стоїть до 3-х. Установки системьі -> Расчетьі -> Координатьі (округление знака после запятой) = 3 (редагував).
Площу по угіддям пише 6.8564, а площу ділянки 6.8563.
Spoiler
BL,
DS="4824884400",
SD="01",
BC="004",
SZ="га.",
CS="2,Х",
HS="2",
AB=6.8563,
PB=1628.04,
MB=0.00,
N=1,NP="1",X=5238066.0323,Y=4259374.9846,MX=0.05,MY=0.05,
N=2,NP="2",X=5238160.4137,Y=4259360.9841,MX=0.05,MY=0.05,
N=3,NP="3",X=5238260.9399,Y=4260072.6765,MX=0.05,MY=0.05,
N=4,NP="4",X=5238166.5162,Y=4260086.3773,MX=0.05,MY=0.05,
N=5,NP="5",X=5238115.7327,Y=4259726.8469,MX=0.05,MY=0.05
SR,
SC="0040035",
PF="1.1",
KZ="19",
PV="ВЛ,-",
CV="2.1",
MP="0",
AS=6.8563,
PS=1628.04,
N=1,NP="1",X=5238066.0323,Y=4259374.9846,MX=0.05,MY=0.05,
N=2,NP="2",X=5238160.4137,Y=4259360.9841,MX=0.05,MY=0.05,
N=3,NP="3",X=5238260.9399,Y=4260072.6765,MX=0.05,MY=0.05,
N=4,NP="4",X=5238166.5162,Y=4260086.3773,MX=0.05,MY=0.05,
N=5,NP="5",X=5238115.7327,Y=4259726.8469,MX=0.05,MY=0.05
CL,
CI=1,
CN="5",
LC="-:-",
AL=6.8563,
PL=1628.04,
N=1,NP="1",X=5238066.0323,Y=4259374.9846,MX=0.05,MY=0.05,
N=2,NP="2",X=5238160.4137,Y=4259360.9841,MX=0.05,MY=0.05,
N=3,NP="3",X=5238260.9399,Y=4260072.6765,MX=0.05,MY=0.05,
N=4,NP="4",X=5238166.5162,Y=4260086.3773,MX=0.05,MY=0.05,
N=5,NP="5",X=5238115.7327,Y=4259726.8469,MX=0.05,MY=0.05
Востаннє редагувалось 07 серпня 2012 16:52 користувачем doslidnik, всього редагувалось 1 раз.
Аватар користувача
Denver
Спец
Спец
Повідомлень: 1355
З нами з: 07 червня 2010 18:10
Репутація: 114
Область: Київська
Місце роботи: Приватні проектні організації

Повідомлення Denver »

doslidnik, Виставив заокруглення до 4-х знаків, скопіював Ваші координати, імпортнув в ГІС ====>>> 6.8563 що в угіддях, що в ділянці.
 ! Повідомлення з: Denver
Перед тим, як задати питання скористайтеся пошуком по форуму. 90% тем вже обговорювалося чи обговорюється.
doslidnik
Спец
Спец
Повідомлень: 810
З нами з: 28 липня 2009 19:47
Репутація: 102
Область: Київська
Місце роботи: Інше

Повідомлення doslidnik »

Сорі треба поставити округлення "3".
Убрав галочку "Подсчет площадей и растаяний с округлением координат". Стало все на свої місця.

Але все одно дивно, чому коли галочка стояла то однй й ту саму площу округлювало по різному?
Аватар користувача
NickS
Спец
Спец
Повідомлень: 1150
З нами з: 07 квітня 2008 15:09
Репутація: 187
Область: Кіровоградська
Місце роботи: Інше
Контактна інформація:

Повідомлення NickS »

doslidnik писав:Версія ГІС 6.1.4.7.Приплили до того самого.Приклад in4. Копіюємо прихований текст в "notepad" та зберігаємо з розширенням in4.Округленя координат в ГІС стоїть до 4-х. Установки системьі -> Расчетьі -> Координатьі (округление знака после запятой) = 4.Площу по угіддям пише 6.8564, а площу ділянки 6.8563.
А це все через те, що Ви імпортували ділянку з установками в 3 знаки. Бо з заокругленням координат на 3 знаки маємо площу 6,8564 га. Далі, Ви змінили в установках заокруглення до 4 знаків. В результаті, площу ділянки перерахувало автоматом при натисненні F5 (або при переході з головного вікна в камеральні функції), а от площа угіддя залишилась, тому що програма не перераховує площу угідь, коли вона вже проставлена (так як це досить багато розрахунків, особливо, коли на ділянці десятки угідь). І тому виходить, що площа угідь не перерахована і залишилась 6,8564 га, а площа ділянки автоматично перерахувалась і стала 6,8563 га. В цьому нічого дивного немає, просто в камеральних функціях натисніть клавішу F10 (або меню "Участок" - функція "Контроль координат участка, плана и агрогрупп") всі площі перерахуються з уже встановленою в установках точністю і буде Вам щастя! :)

Он у людей, що задали заокруглення координат до 4 знаків ще перед імпортом Вашої ділянки, все нормально вийшло відразу.
Denver писав:6.8563
Додано через 1 хвилину 42 секунди:
doslidnik писав:Сорі треба поставити округлення "3".Убрав галочку "Подсчет площадей и растаяний с округлением координат". Стало все на свої місця. Але все одно дивно, чому коли галочка стояла то однй й ту саму площу округлювало по різному?
Ні, галочку верніть на місце! Вона таки потрібна. Просто не забувайте перераховувати через F10 всі площі після зміни точності заокруглень.
doslidnik
Спец
Спец
Повідомлень: 810
З нами з: 28 липня 2009 19:47
Репутація: 102
Область: Київська
Місце роботи: Інше

Повідомлення doslidnik »

Так чого площа угіддя та ділянки по різному виходять? Я не сперечаюсь чи вірно 6.8563 чи 6.8564?
В мене виходить при активній "Подсчет площадей и растаяний с округлением координат" вони різні при округлені до 3-х.
По замовченню у мене стоїть до 4-х, але прийшов протокол та поставив до 3-х щоб зв'ясувати причину.
Аватар користувача
NickS
Спец
Спец
Повідомлень: 1150
З нами з: 07 квітня 2008 15:09
Репутація: 187
Область: Кіровоградська
Місце роботи: Інше
Контактна інформація:

Повідомлення NickS »

facepalm Площі угідь треба перераховувати при зміні точності заокруглень!

Додано через 5 хвилин 49 секунд:
doslidnik писав:По замовченню у мене стоїть до 4-х
Краще поставте до 3 і не змінюйте. Нехай буде так, як в управлінні, тоді менше проблем буде.
Відповісти