문제

강렬한 숫자 처리를 위해 부동 소수점 대신 고정 소수점을 사용하는 것을 고려하고 있습니다.물론 고정 소수점 유형의 크기가 몇 바이트인지, 어떤 CPU에서 실행될지, (인텔의 경우) MMX나 SSE를 사용할 수 있는지 또는 어떤 새로운 기능이 나오는지 등이 중요합니다.

요즘 부동 소수점이 그 어느 때보다 빠르게 실행되는 경우 고정 소수점을 고려해 볼 가치가 있는지 궁금합니다.몇 퍼센트 이상 중요하다고 말할 수 있는 일반적인 경험 법칙이 있나요?35,000피트 상공에서의 수치 성능 개요는 무엇입니까?(그런데 DSP나 특수 임베디드 시스템이 아닌 대부분의 컴퓨터에서 발견되는 일반 CPU를 가정하고 있습니다.)

도움이 되었습니까?

해결책

여전히 그만한 가치가 있습니다.부동 소수점은 이전보다 빠르지만 고정 소수점도 빠릅니다.그리고 IEEE 754에서 보장하는 것 이상의 정밀도에 관심이 있다면 고정 방법이 여전히 유일한 방법입니다.

다른 팁

매우 많은 양의 데이터를 다루는 상황에서 고정 지점은 메모리 효율의 두 배가 될 수 있습니다. 대형 지리 공간 데이터 세트에서 자주 사용되는 기술은 모든 데이터를 공통 원산으로 줄이는 것입니다. 가장 중요한 비트를 폐기하고 나머지는 고정 된 점 정수와 함께 작동 할 수 있습니다. 플로팅 포인트는 포인트가 실제로 떠 다니는 경우에만 중요합니다. 즉, 매우 높은 정확도로 매우 광범위한 숫자를 다루고 있습니다.

고정 소수점을 사용하는 또 다른 좋은 이유는 반올림이 훨씬 단순하고 예측 가능하기 때문입니다. 대부분의 재무 소프트웨어는 고정점 임의의 정밀 소수점을 사용하여 반 반올림으로 돈을 대표합니다.

고정 점 (X86, Pentium, 68K 및 ARM의 경험)을 사용하는 것이 거의 항상 빠릅니다. 그러나 응용 프로그램 유형에 따라 다를 수 있습니다. 그래픽 프로그래밍 (고정 포인트의 주요 용도 중 하나)의 경우 사전 작성 코사인 테이블, 로그 테이블 등을 사용하여 코드를 최적화 할 수 있지만 기본 수학 작업도 더 빠르게 입증되었습니다.

금융 소프트웨어에 대한 의견. 이전 답변에서 고정 점은 재무 계산에 유용하다고 말합니다. 내 경험 (대규모 재무 관리 시스템 개발 및 광범위한 신용 카드 처리 경험)에서는 고정점을 사용하지 않을 것입니다. 플로팅 또는 고정 지점을 사용하여 반올림 오류가 있습니다. 우리는 항상 전체 금액을 사용하여 금전 금액을 나타내며 가능한 최소 금액 (유로 또는 달러의 경우 1C)을 계산합니다. 이것은 부분 금액이 손실되지 않도록합니다. 복잡한 계산을 수행 할 때 값이 복식으로 변환되면 응용 프로그램 별 반올림 규칙이 적용되고 결과는 정수로 다시 변환됩니다.

하드웨어가 부동 소수점을 지원하지 않거나 하드웨어 구현이 빨라지는 경우 고정점을 사용하십시오.

또한 수업을 만들 때 조심하십시오. 당신이 빠르다고 생각하는 것은 필요한 수업 사본으로 인해 프로파일 링에 관해서는 실제로 개로 판명 될 수 있습니다. 그러나 그것은 또 다른 시간에 대한 또 다른 질문입니다.

다른 이유 고정점을 사용하는 것은 그 것입니다 ARM 휴대 전화 및 태블릿과 같은 장치, FPU가 부족합니다 (적어도 많은 것들).

실시간 응용 프로그램을 개발하려면 고정 점 산술을 사용하여 기능을 최적화하는 것이 합리적입니다. FFT (빠른 푸리에 변환), 그래픽을위한 매우 흡수기의 구현이 있으며, 이는 플로팅 포인트 산술에 의존하는 데 따른 효율성을 바탕으로합니다.

일반 목적 CPU를 사용하고 있기 때문에 응용 프로그램에 성능이 매우 중요하지 않으면 모든 TIC를 계산 해야하는 경우 고정 점을 사용하지 않는 것이 좋습니다. 고정 점을 구현하고 오버플로와 같은 문제를 다루는 번거 로움은 CPU가있을 때 그만한 가치가 없습니다.

IMHO, 고정 점은 부동 소수점 작업에 대한 하드웨어 지원없이 DSP를 사용할 때만 필요합니다.

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