문제

프로젝트를 위해 C ++에서 작고 부적절한 선형 대수 라이브러리를 쓰고 있습니다 (죄송합니다). 이중 정밀 번호를 사용하여 행렬과 작업을 구현하고 있습니다. 내가 옳고요? 대신 템플릿 클래스를 구현해야합니까? 주변에 더 정확한 유형이 있습니까?

도움이 되었습니까?

해결책

템플릿을 사용하여 C ++ 선형 대수 라이브러리를 작성했습니다. 제 생각은 우리가 언젠가 복소수 또는 확장 된 정밀 번호를 사용하고 싶을지도 모른다고 생각했습니다. 아마도 7 년 전이었고 우리는 아직 그것을하지 않았습니다. 우리는 거의 항상 두 배를 템플릿 유형으로 사용하며,이를 쉽게 만들기 위해 입력 할 수 있습니다.

몇 번 우리는 다른 방향으로 갔다가 유형을 사용했습니다. 더 작은 더블보다. 예를 들어, 우리는 설명 된 메모리 바운드 응용 프로그램에서 두 배가 아닌 플로트를 사용했습니다. 여기. 그러나 우리가 더블을 사용하는 시간의 99.9 %.

템플릿 인수를 사용하는 경우 정수 유형을 사용하지만 부동 소수점 유형이 필요합니다. 예를 들어, 항목이 모두 정수 인 매트릭스가 있고 매트릭스를 사용한다고 가정 해 봅시다.u003Cint> 수업. 그러나 당신은 그것을 선형 솔버에게 전달합니다. 이제 산술이 사용됩니다 정수 부서와 결과가 잘못되었습니다. (내가 해냈어!)

다른 팁

템플릿을 사용하여 클래스/구조물을 구현합니다. 처음에는 당신은 단지 만족할 것입니다. double, 그러나 나는 모든 프로젝트에서 내가 그렇지 않았다 매트릭스를 템플릿으로 구현하면 나중에 후회했습니다.

또한 더 흥미로운 요소 대수-간격 산술, 확률 분포, 복잡한 수학, 고정점 일치, 하위 매트릭스, 간단한 수학 :-) 등을 사용할 수있는 기회를 제공합니다.

프로젝트를 위해 C ++의 작고 부적절한 선형 대수 라이브러리를 쓰고 있습니다 (죄송합니다)

아야! 조심해, 매우 조심하세요 ... 체크 아웃 자마/TNT -NIST 승인 스탬프가 있으며 이미 "간단한"선형 대수 수학, 즉 다양한 인수 알고리즘을 처리했습니다. 선형 대수는 수치 정밀도로 많은 까다로운 문제를 포함합니다 (예 : 힐버트 매트릭스) 그리고 내가 내 자신의 일을 좋아하는만큼 이것은 이미 잘 테스트 된 좋은 탄탄한 기초를 사용하고 싶은 영역 중 하나입니다.

당신은 그것과 함께 긴 두 배를 사용할 수 있어야하지만 (확실하지 않음) 알고리즘 자체는 아마도 행렬의 정밀도보다 더 중요 할 것입니다.

최종 질문 답변 : 예, long double 적어도 정확합니다 double. 템플릿 사용 여부에 관계없이 예, 템플릿을 사용합니다. 그것은 그들에게 큰 usecase이며 다른 스칼라 수 유형으로 포팅을 더 쉽게 포팅 할 것이라고 생각합니다. 그런 다음 실행중인 시스템에 따라 플로트 및/또는 이중 매트릭스를 입력 할 수 있으며 어느 것이 더 빠르거나 더 잘 작동하는지에 따라 유형이 될 수 있습니다.

자신을 위해 추가로 일하지 마십시오. 이중 (또는 긴 더블)으로 갈 수 있다면 그것으로 가십시오.

이것은 단지 작은 프로젝트 인 것 같습니다.이 경우 템플릿이 당신을 위해 일할 것입니다.

논의되지 않은 또 다른 옵션은 템플릿을 사용하여 요소 유형을 정의하는 것입니다. 이로 인해 추가 작업이 많지 않지만 나중에 일부 변경을 허용합니다.

Long Double보다 더 정확한 다른 유형은 없습니다. 하드웨어 지원이 있습니다. 그러나 더 정밀도가 필요하다고 느끼면 자신만의 유형을 자유롭게 만들 수 있습니다. 그러나 광범위한 최적화로도 기본 이중 유형보다 상당히 느립니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top