2015-01-10 55 views
2

특정 정밀도와 지수 및 significand의 특정 비트 수를 사용하여 고유 한 부동 소수점 형식 (유형)을 정의하려면 어떻게해야합니까? 예를 들어, 20 비트 지수 및 107 비트 유효 숫자 (표준 15/112 비트가 아님)가있는 128 비트 부동 소수점 수 또는 19/236 지수/유효 숫자가있는 256 비트 부동 소수점 수를 예로들 수 있습니다.C++에서 사용자 정의 부동 소수점 형식 (유형)을 정의하는 방법은 무엇입니까?

+0

일반적인 float/double 알고리즘의 구현을보고 128 비트에 대해서도 동일하게 수행합니다. AIX가 128 비트 부동 소수점을 지원한다는 것을 알았습니다. 소스를 사용할 수 있으면 다음과 같이 볼 수 있습니다. "AIX® 운영 체제는 128 비트 long double 데이터 형식 ... "입니다. – i486

+0

언어 자체에는 직접적인 지원이 없습니다. (1) 기본 알고리즘을 올바르게 가져와 (2) 연산자 오버로드로 말을 타고 네 타입을 네이티브 타입처럼 느껴야합니다. – tmyklebu

+1

@ i486 : 단일 및 이중 정밀도 부동 소수점 구현은 CPU의 하드웨어 회로입니다. "128 비트에 대해서도 똑같이하십시오."사람들이 자신의 CPU 디자인을 설계하고 제작한다는 사실을 솔직하게 제안합니까? –

답변

3

두 가지 방법이 있습니다. 여러분은 지수에 대한 멤버와 가수에 대한 멤버가있는 자신 만의 클래스를 만들 수 있으며, 필요한 연산자에 대한 코드를 작성한 다음 표준 수학에 일반적으로 필요한 모든 함수를 구현할 수 있습니다 도서관. (atan(), sin(), exp()pow() 같은 것들.)

또는 기존 임의 정밀도 라이브러리를 찾을 대신 사용할 수 있습니다. 직접 구현하는 것은 흥미롭고 재미있을 것입니다. 유스 케이스가 극도로 제약을받지 않는 한 많은 오류가 발생하고 작업량이 매우 많을 수 있습니다.

위키 피 디아는 스스로 찾아 볼 수있는 a list of arbitrary precision math libraries입니다.

+0

실제로 하드웨어 구성 요소와 일치하는 특정 형식을 벗어나면 비트 필드로 구성 요소를 팩하려고하면 전혀 이해가되지 않습니다. –