과학 컴퓨팅에서 복잡한 산술의 위험


11

복소 내적 : 규칙에 의해 결정된 두 가지 정의 보유 ˉ U T V 또는 U T ˉ 브이 . BLAS에서 cdotu, zdotu 및 cdotc, zdotc 루틴을 찾았습니다. 전자의 두 루틴은 실제로 u T v (가짜 내부 제품!)를 계산하고 마지막 두 루틴은 내부 제품의 첫 번째 벡터를 결합합니다. 또한, 어느 정의상 (공액 U 또는 V ) U , V = ¯ V , U ,V¯VV¯VV,V=V,¯활용 또한 주석에서 지적했듯이 다중 값 복합 함수의 주요 값을 선택하는 것은 규칙에 따라 다를 수 있습니다.

내 질문은 :이 합병증이 과학 컴퓨팅에서 복잡한 산술을 사용하는 데 진정한 위험을 초래합니까? 이 문제는 deal.ii 저자가 강조합니다. 그는 복잡한 숫자를 항상 실수 부분과 허수 부분으로 나누고 실제 산술 만 사용하도록 제안합니다. 그러나 분할 방법이 편리하다는 것을 결코 알지 못했습니다. 예를 들어 시간-고조파 맥스웰 방정식 에 대한 PML 을 생각해보십시오 .

FreeFem ++ 및 libmesh를 제외한 대부분의 오픈 소스 FEM 소프트웨어에서 복잡한 숫자를 사용하는 것에 대한 우려가 널리 퍼져있는 것 같습니다. 그러나 두 예외를 제외하고 복잡한 산술은 실제보다 덜 테스트됩니다.

내 마지막 질문은 : 우리는 항상 복잡한 숫자를 사용하지 않아야합니까?


3
사람이 정말 어떤 루트 알고 있나요 내가 어느입니다 - 내가 ? 소프트웨어 개발자는 복잡한 산술 계산의 긴 체인에 일관성없는 활용을 포함시키지 않도록 회귀 스위트에 작은 테스트 예제 세트를 포함해야합니다. 1나는나는
hardmath

@hardmath 감사합니다! 질문에 추가했습니다.
Hui Zhang

@hardmath : "소규모의 테스트 예제"-선형 대수 연산을 포괄적으로 구현하는 대부분의 라이브러리에는 내부 제품을 가져 오는 수십 또는 수백 곳이있을 수 있습니다. 정확성을 검증하려면 수백 번의 테스트가 필요하며 올바르게 구현하려면 몇 달이 걸릴 수 있습니다. 물론 불가능한 것은 아니며 일부 도서관에서는 그렇게했습니다. 그것은 많은 작업 일뿐 아니라 모든 도서관 저자들이 자신들이 옳았다 고 확신하지는 않습니다 :-(
Wolfgang Bangerth

@WolfgangBangerth, 아마도 당신은 거래를 설명 할 수 있습니다 .ii 디자인 결정?
Bill Barth

3
항상 복소수를 사용하지 않는가? 안돼 예를 들어 모든 계산 과학자는 비대칭 고유 값 분해가 필요하다고 생각합니다.
Federico Poloni

답변:


2

복소수 산술의 문제점은 실제 경우의 한 가지 방법과 비교하여 복소수 벡터에 대한 스칼라 곱을 정의하는 방법이 다르다는 것입니다. 복잡한 스칼라 곱의 실제 문제는 또 다른 문제이지만 관찰과 밀접한 관련이 있다고 생각합니다.

복잡한 산술에서는 스칼라 곱의 인수 순서가 중요하지만 실제 산술에서는 그렇지 않습니다. 많은 알고리즘은 복소수와 실제 산술에서 본질적으로 동일합니다. 즉, 한 번만 작성한 다음 복소수와 실제 산술에 동일한 코드를 사용해야합니다. (예를 들어, C ++에서는 이러한 목적으로 템플릿을 사용할 수 있습니다.) 코드 작성이 끝나면 일반적으로 테스트합니다. 일부 스칼라 제품에서 인수 순서의 실수를 발견하려면 복잡한 값의 테스트 케이스로 코드를 테스트해야합니다.

복잡한 가치 문제에 대한 작업 코드가있는 경우 종종 알고리즘의 실제 코드를 무료로 얻을 수 있습니다. 복소수 테스트 사례를 사용하여 코드를 테스트 한 경우 코드는 실수로도 정확합니다. 그러나 실제 가치 코드를 복잡한 코드로 바꾸려면 추가 작업이 필요합니다. 따라서 복잡한 가치 문제보다 실제 가치에 대해 작동하고 철저히 테스트되는 코드가 더 많습니다.

내 질문은 :이 합병증이 과학 컴퓨팅에서 복잡한 산술을 사용하는 데 진정한 위험을 초래합니까?

나는 다음과 같이 "예"라고 말할 것입니다. 복잡한 값의 문제에 대해 코드를 제대로 테스트하지 않으면 코드에 버그가있을 가능성이 높지만보고있는 구체적인 코드에 따라 다릅니다. 코드가 제대로 테스트되면 아무런 문제가 없습니다.

내 마지막 질문은 : 우리는 항상 복잡한 숫자를 사용하지 않아야합니까?

이미 지적했듯이 실수를 사용하여 해결할 수없는 문제가 있습니다. 예를 들어, 비대칭 행렬의 고유 값 계산. 따라서 복잡한 산술이 필요합니다.


-1

이 논문은 관련이있다 :

초등 복잡한 함수 또는 아무것도없는 부호 비트에 대한 분기 컷.

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


5
SciComp에 오신 것을 환영합니다! 링크 한 논문이 왜 관련이 있는지에 대해 더 설명해 주시겠습니까? 요약하면 답변이 더 가치 있고 투표율이 높아질 것입니다. 문맥이 충분하지 않으면 링크를 추가하는 답변을 권장하지 않는 경향이 있습니다.
Geoff Oxberry
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.