Небезпека складної арифметики в наукових обчисленнях


11

Комплекс скалярний твір має два різних визначень вирішує умовні позначення : · ¯u T V або ¯u T ° V . У BLAS я знайшов підпрограми cdotu, zdotu та cdotc, zdotc. Колишні дві процедури фактично обчислюють u T v (підроблений внутрішній продукт!), А останні два підпрограми поєднують перший вектор у внутрішньому продукті. Крім того , будь-який з визначення (кон'югат U або V ), U , V = ¯ V , U u,vu¯TvuTv¯uTvuvu,v=v,u¯з кон'югацією! Крім того, як зазначено в коментарі, вибір основних значень для багатозначних складних функцій може залежати від конвенції.

Моє запитання: чи спричинює це ускладнення справжню небезпеку для використання складної арифметики в наукових обчисленнях? Це питання наголошують автори deal.ii, які пропонують завжди ділити складні числа на реальну частину та уявну частину та використовувати лише реальну арифметику. Але я ніколи не знаходив підхід розщеплення як зручний. Наприклад, подумайте про PML для гармонійних рівнянь часу Максвелла.

Здається, турбота про використання складних чисел є поширеною у більшості програмних програм FEM з відкритим кодом, за винятком FreeFem ++ та libmesh. Але навіть за двома винятками, складна арифметика є менш перевіреною, ніж реальна.

Моє остаточне запитання: чи просто ми завжди уникатимемо використання складних чисел?


3
1ii

@hardmath Дякую! Я додав це у запитання.
Хуй Чжан

@hardmath: "невеликий набір тестових прикладів" - у більшості бібліотек, які всебічно реалізують операції лінійної алгебри, можливо, буде десятків чи сотень місць, де взяті внутрішні продукти. Щоб перевірити їх правильність, знадобиться сотні тестів, і, можливо, потрібні місяці, щоб їх правильно виконати. Звичайно, це неможливо, і деякі бібліотеки зробили це. Це просто велика робота, і не всі автори бібліотеки впевнені, що вони правильно зрозуміли :-(
Вольфганг Бангерт

@WolfgangBangerth, можливо, ви могли б пояснити рішення.
Білл Барт

3
Чи завжди ми завжди уникаємо використання складних чисел? Будь ласка, ні. Я вважаю, що, наприклад, кожен учений-обчислювач потребує несиметричних власних значень розкладу.
Федеріко Полоні

Відповіді:


2

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

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

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

Моє запитання: чи спричинює це ускладнення справжню небезпеку для використання складної арифметики в наукових обчисленнях?

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

Моє остаточне запитання: чи просто ми завжди уникатимемо використання складних чисел?

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


-1

Ця стаття актуальна:

Відсікання гілок для елементарних складних функцій або багато іншого про біт знака нічого.

http://people.freebsd.org/~das/kahan86branch.pdf


5
Ласкаво просимо до SciComp! Можливо, ви могли б пояснити більше, чому папір, на яку ви посилаєтеся, є актуальною? Резюме зробить вашу відповідь більш цінною і, швидше за все, буде оприлюдненою. Ми схильні відштовхувати відповіді, які додають посилання без достатнього контексту.
Джефф Оксберрі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.