Актуальність обчислень з фіксованою і довільною точністю


10

Я бачу дуже мало бібліотек / пакетів обчислень, що не мають плаваючої точки, навколо. Враховуючи різні неточності подання плаваючої точки, виникає питання, чому не існує принаймні деяких полів, де ця підвищена точність може бути вартий тонкощів роботи з фіксованою точкою.

Чи існують ОСНОВНІ труднощі у використанні, скажімо, вирішувача власного значення з фіксованою точкою? Наскільки повільними / швидкими, неточними / точними вони були б?

Супутнє: це та це


Milind R, дякую за запитання. Я думаю, що ваше запитання цікаве, але, ймовірно, невідповідне для сайту. Я закликаю вас ознайомитись із поширеними питаннями на сайті . Коли я дивлюсь на ваше запитання, у мене виникає враження, що це початок зухвалості, хоча я думаю, що елементи відповідного питання про сайт є. Варто запитати, чи є в обчислювальній науці багато застосувань цілочисельної арифметики і арифметики з фіксованою точкою, а також попросити порівняти ці арифметики з плаваючою точкою. Я рекомендую редагувати вашу публікацію.
Джефф Оксберрі

Так, він народився від розпуки, але я висловив це як прагнення виправдати статус-кво. Моє запитання, як ви можете припустити, стосується того, чому ми не можемо зробити великий перехід до математики цілочисельних і фіксованих точок в інтенсивній чисельності. Чи можете ви редагувати його від мого імені? Я справді намагався, але не знаю, як моє питання не підходить.
Milind R

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

@MilindR: Спільнота обчислювальної геометрії зацікавила обчислення реальних чисел, які є високоефективними та точними одночасно. Я думаю, що всі практичні питання, які стосуються вас, можна спостерігати в цій галузі досліджень. Приклад, який ви можете шукати, - це бібліотека LEDA.
шухало

@GeoffreyIrving Що з нулями у трикутних матрицях? Хіба вони не можуть бути збережені як завгодно , крім неточною помилки , схильна з плаваючою точкою?
Milind R

Відповіді:


5

Використання арифметики з фіксованою точкою може бути доцільним за певних обставин. Взагалі для наукових обчислень (принаймні в тому сенсі, що про це думає більшість людей) це не підходить через необхідність вираження великих динамічних діапазонів. В якості прикладу ви згадуєте проблеми власного значення, але дуже часто в науці цікавляться найменші власні значення матриці (скажімо, для обчислення основного стану квантової системи). Точність малих власних значень, як правило, буде досить погіршена відносно великих власних значень, якщо використовувати фіксовану точку. Якщо ваша матриця містить записи, які відрізняються великими співвідношеннями, малі власні значення можуть бути абсолютно невиразними в робочій точності. Це проблема із поданням чисел; ці аргументи справедливі незалежно від того, як ви робите проміжні обчислення. Можливо, ви можете розробити масштабування, щоб застосувати до обчислених результатів, але тепер ви просто винайшли плаваючу крапку. Легко побудувати матриці, елементи яких добре поводяться, але чиї власні значення надзвичайно погано поводяться (якМатриці Вілкінсона або навіть матриці з цілими записами ). Ці приклади не такі патологічні, як можуть здатися, і багато проблем на передовій науці стосуються дуже погано поведених матриць, тому використання фіксованої точки в цьому контексті є поганою ідеєю (TM).

Ви можете стверджувати, що ви знаєте масштаби результатів і хочете не витрачати шматочки на показник, тому поговоримо про проміжні продукти. Використання фіксованої точки, як правило, посилить наслідки катастрофічних скасування та заокруглення, якщо ви дійсно не зазнаєте великих зусиль, щоб працювати з більшою точністю. Штраф за продуктивність був би величезним, і я б припустив, що використання зображення з плаваючою комою з однаковою шириною біти мантіси буде швидше і точніше.

Одна область, де нерухома точка може світити, - це певні області геометричних обчислень. Особливо, якщо вам потрібна точна арифметика або заздалегідь знаєте динамічний діапазон усіх чисел, фіксована точка дозволяє скористатися всіма бітами у вашому поданні. Наприклад, припустимо, що ви хотіли обчислити перетин двох ліній, і якимось чином кінцеві точки двох ліній нормалізуються для розміщення на одиничній площі. У цьому випадку точка перетину може бути представлена ​​більшою кількістю бітів точності, ніж використання еквівалентного числа з плаваючою точкою (що буде витрачати біти на експонент). Зараз майже напевно випадок, що проміжні числа, необхідні в цьому розрахунку, потрібно обчислити з більшою точністю або принаймні зробити дуже обережно (як, поділяючи добуток двох чисел на інше число, потрібно бути дуже обережним ). У цьому відношенні фіксована точка є вигіднішою з точки зору представлення, а не з обчислювальної точки зору, і я б пішов так далеко, щоб сказати, що це, як правило, вірно, коли ви можете встановити певні верхні та нижні межі на динамічному діапазоні виходів ваших алгоритмів. . Це трапляється рідко.

Раніше я думав, що подання з плаваючою точкою є грубим або неточним (навіщо витрачати шматочки на показник ?!). Але з часом я зрозумів, що це дійсно одне з найкращих можливих уявлень для реальних чисел. Речі в природі відображаються в масштабах журналу, тому реальні дані закінчуються для широкого кола експонатів. Також для досягнення максимально можливої ​​відносної точності потрібно працювати над масштабами журналу, роблячи відстеження показника більш природним. Єдиний інший претендент на "природне" представлення - це симетричний індекс рівня . Однак додавання і віднімання набагато повільніше в цьому представленні, і йому не вистачає апаратної підтримки IEEE 754. Величезна думка була вкладена в стандарти плаваючої точки, стовпом числової лінійної алгебри. Думаю, він знає, що таке «правильне» представлення чисел.


4

Як приклад того, чому точна арифметика / фіксована точка так рідко використовується, розглянемо це:

  • У методі кінцевих елементів, як і майже у всіх інших методах, що використовуються в наукових обчисленнях, ми дійшли до лінійних або нелінійних систем, які є лише наближенням до реального світу. Наприклад, у FEM лінійна система, яку слід вирішити, - це лише наближення до вихідного часткового диференціального рівняння (яке само по собі може бути лише наближенням до реального світу). То чому б докласти величезних зусиль для вирішення чогось, що є лише наближенням?

  • Більшість алгоритмів, якими ми користуємось сьогодні, мають ітераційний характер: метод Ньютона, кон'югатні градієнти тощо. Ми припиняємо ці ітерації, коли ми впевнені, що точність ітеративного наближення до розв’язання задачі є достатньою. Іншими словами, ми припиняємо, перш ніж мати точне рішення. Як і раніше, навіщо використовувати точну арифметику для ітеративної схеми, коли ми знаємо, що ми обчислюємо лише наближення?


Прикро визнати, але так, ваша відповідь в основному розпинає широкомасштабне використання точних обчислень. Я думаю, що я floatскоро не побачу спину .
Milind R

@MilindR: Я не зовсім впевнений, на що ти прагнеш. Ви ніби маєте молоток і розчаровані, що ніхто не має цвяха чи не думає, що молоток - корисний інструмент. Але це не тому, що ми вас не любимо - ми довго думали над цими питаннями і просто вирішили, що викрутка, яка є у нас, є належним інструментом. Я не вважаю нічого страшного в цьому (якщо у вас немає молотка), оскільки це просто прагматичний підхід - навіщо використовувати точну арифметику, коли ми робимо лише наближення?
Вольфганг Бангерт

Це засмучує, бо цілком нормальна проблема може бути настільки погано обумовлена, що вона фактично нерозв'язна. Так само тому, що ідеал довільної точності виглядав настільки перспективним, порівняно з неточним характером плаваючої точки прямо від зберігання значення до його виведення.
Milind R

Проблема полягає в тому, що помилки округлення надзвичайно важко проаналізувати. Я зрозумів це того дня, коли почав вивчати числовий аналіз та чисельну лінійну алгебру. Отже, система, яка повністю уникає проблеми, перетворюючи умову на проблему, повинна сприймати світ штормом? було мислення. Звичайно, я розумію обмеження, але вони здавалися швидше подразниками, ніж розбійниками. Наче подібні на підвищену складність зменшення транзисторів в процесорах. Так, його важко проаналізувати, але Intel все одно це робить.
Milind R

2
Якщо проблема настільки погано обумовлена, що її важко вирішити, то її рішення не стійке до збурень. Це проблема оригінальної проблеми, а не подання з плаваючою комою. Так, можливо, ви зможете вирішити проблему, використовуючи точне подання. Але рішення не є стабільним і тому, ймовірно, не матиме нічого спільного з тим, що ви насправді шукаєте. Ви гавкаєте неправильне дерево, якщо вважаєте, що проблема представлення чисел.
Вольфганг Бангерт

3

Якщо ви подивитеся на цю бібліотеку для правильного округлення: CRlibm , ви побачите в документації, що алгоритми, як правило, повинні бути доведеними точними (з аргументованими доказами). Чому? Стійкість і швидкість конвергенції результату функції не відповідає "один розмір-всім" відповідь. Коротше кажучи, немає "безкоштовного обіду" - вам доведеться працювати, щоб довести свої міркування правильними. Це пов'язано з поведінкою модельованих функцій, а не з базовим обладнанням (чи використовуєте ви цілі чи одиниці з плаваючою точкою, хоча так, обидва мають "gotchas", як переповнення / переповнення, денормальні числа тощо) Навіть якщо результат ви шукаєте збіги до цілого числа, алгоритм, який використовується для пошуку результату, не обов'язково дуже стабільний.

Eigen - це бібліотека C ++, яка має різноманітні алгоритми розв’язування матриць, кожна з яких має різні властивості. Ця сторінка містить таблицю, в якій обговорюються компроміси швидкості та точності для різних алгоритмів, що використовуються для вирішення матриці. Я підозрюю, що бібліотека Eigen може робити все, що завгодно. :-)


Дякую .. Дуже інформативне та приємне посилання. Але чи не використання фіксованої точки поряд з обмеженим ступенем округлення призводить до більш точних результатів? Оскільки саме представлення саме для початку, на відміну від плаваючої точки?
Milind R

1
Я пропоную вам атакувати свою проблему з іншої точки зору. Вступаючи в логіку, ви дізнаєтесь, що вирішення проблеми існує три частини: визначення, міркування та висновок / результат. Ви, напевно, (як і більшість із нас) дуже звикли працювати переважно над кроком "визначення" вирішення проблеми - зазвичай ви можете "визначити" свою проблему; однак, якщо ви засмучуєтесь, час від часу ви стикаєтеся зі складнішим типом проблеми, яка потребує більше роботи в частині "міркування".
мда

Я лише невиразно вас розумію ... Я не бачу, де я можу "визначитись" з цією проблемою, міркування важливі.
Milind R

Через кілька років я насправді вас розумію :-)
Milind R

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.