Розрахунок дій: плаваюча точка проти ТТЕ проти теорії домену проти тощо


19

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

Наприклад, чи є області застосунків, де нас мало хвилюють помилки з плаваючою комою? Чи є серйозні проблеми складності?

Відповіді:


17

Я працюю в обчисленні в реальній кількості, і хотілося б, щоб я знав справжню відповідь. Але я можу міркувати. Думаю, це соціологічна проблема.

Спільнота людей, які працюють над точно реальною арифметикою, складається з теоретиків, які не звикли розробляти програмне забезпечення. Так вони зазвичай покладають завдання на виконання студентами (помітним винятком є iRRAM Норберта Мюллера ), або вони мають власні іграшкові варіанти .

Люди, які так роблять є необхідна програмування харизми не мають необхідну теоретичну базу. Без міцних теоретичних підстав складно правильно спроектувати справжню арифметику. Наприклад, помилково додавати багато справжніх чисел у forциклі, оскільки ви отримаєте неприйнятне виконання через втрату точності. Якщо ви хочете додати багато і багато дійсних дій, вам слід зробити це з деревоподібною структурою, враховуючи величини часткових сум. Ще одна річ , яку важко отримати через що <і =як загальна булевої функції на переАльсу просто не існує (ви можете мати , =але вона або повертається falseабо розходиться і <розходиться при введенні двох рівних реалів).

Нарешті, зовсім не ясно, що ми знаємо, як реалізувати бібліотеки для точної реальної арифметики. Вони не є звичайними фрагментами бібліотек, які просто визначають деякі типи даних та деякі функції на них. Часто точна реальна арифметика вимагає спеціальних режимів контролю. Наприклад, iRRAM бере на себе головне виконання програми (вона буквально викрадає main), а також стандартний вхід і вихід, щоб він міг перезапустити програму при втраті точності. Моя бібліотека справжньої арифметики в Хаскеллі відбувається в аStaged монаді (що по суті є Readerмонадою). Більшість людей очікують, що реальні цифри будуть "просто іншим типом даних", але я маю сумніви з цього приводу.


Я майже цілком невідомий щодо точної реальної арифметики, але чи не міг би реалізувати у ній підсумок Кахана?
jjg

1
Хм, я так не думаю. Подумайте про точну справжню арифметику як про інтервальну арифметику, яка самостійно регулює проміжну точність для досягнення бажаної точності на виході.
Андрій Бауер

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

1
Я побачив, що є деяка активність у впровадженні реальних обчислень з коіндуктивними типами. Мені здається, що коіндуктивні типи все ще досить складні, щоб виправитись (я, звичайно, не є експертом у цьому), але чи вважаєте ви, що це обіцяє більш широкого використання точних реальних обчислень?
SorcererofDM

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

10

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

Я вважаю, що головний аргумент проти точного обчислення реал - це одна з результативностей . Отже, коротка відповідь: коли продуктивність важливіша за точність, вам потрібно буде використовувати числа з плаваючою комою .

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

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

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


1
Чи є перевірені прогалини між деякою формою точного реального обчислення та обчисленням з плаваючою точкою?
SorcererofDM

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

-6

π -ness"? По суті, реальні числа визначаються різними граничними процесами; багатьом з цих граничних процесів присвоєно спеціальні назви, а деякі з них є досить спеціальними, що утворюють значні підмножини дій (наприклад, алгебраїчні числа)

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

R

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