2016-10-17 3 views
0

내가 찾을 수있는 모든 것은 10 진수가 0이 될 때까지 2로 곱하면된다. 그러나 이것은 마지막 소수점이 5 인 경우에만 작동한다.마지막 십진수가 5가 아닌 경우 어떻게 바이너리를 IEEE754로 변환합니까?

내 특별한 경우 변환 할 수는 98765.4321이다. 이 (또는 해결되지 않은 다른 십진수)를 IEEE754로 변환 하시겠습니까?

+2

빠른 답변 : 원하는 반올림 모드를 사용하여 원하는 IEEE-754 바이너리 대상 형식으로 반올림 할 비트가 충분히 생성 될 때까지 변환 프로세스를 계속 진행하십시오. 긴 대답 : 그것은 복잡합니다. 여러 논문이 주제에 쓰여졌습니다. [this one] (http://www.cesura17.net/~will/professional/research/papers/howtoread.pdf) – njuffa

+0

@njuffa 그것은 대답 일 뿐인 것처럼 보입니다. –

+0

@PatriciaShanahan지지를 보내 주셔서 감사합니다.하지만 그대로,이 말은 형편없는 대답입니다. IMHO. 나는 오늘 밤 나중에 더 나은 것을 제공하기 위해 시간을 가져야한다. – njuffa

답변

2

다음과 같은 질문을합니다 : 십진수를 포함 할 가능성이있는 소수 자릿수 시퀀스로 지정된 숫자가 지정되며 가능하게 과학 표기법을 사용합니다. 이 숫자를 IEEE 754 부동 소수점 표준 (반 정밀도), binary32 (단 정밀도), binary64 (배정 밀도) 또는 binary128 (배정 밀도)으로 지정된 이진 부동 소수점 형식 중 하나로 올바르게 변환하는 방법은 무엇입니까? ?

대부분의 십진수는 2 진 부동 소수점 형식으로 정확하게 표현할 수 없습니다. 즉, 최종 결과를 결정하는 데 사용해야하는 IEEE-754 반올림 모드 중 하나를 선택해야합니다. 양의 무한대 ("위로")로 반올림하고 음의 무한대로 반올림 ("아래로"), 0으로 반올림 , 또는 nearest-nearest-or-even ("closest")로 반올림합니다. 일반적으로 10 진수 - 2 진수 변환은 최하위 또는 반올림으로 나열된 마지막 모드를 사용하므로 변환의 전체 오류를 최소화합니다.

개념적으로 우리의 작업은 간단합니다. 올바른 반올림 결정을 내릴 수있을만큼 비트가 생성 될 때까지 변환 프로세스를 수행하십시오. 분명히 우리는 종종 목표 포맷에 의해 제공되는 것보다 더 많은 비트를 필요로 할 것이다. 그러나 우리가 필요로하는 비트 수를 정확하게 알려주지는 못합니다. 둥근하기 어려운 경우에는 타이 케이스에 매우 근접한 결과가 생성되기 때문입니다. take-home 메시지는 알고리즘의 일부분이 확장 된 정밀도 (또는 다중 정밀도) 산술을 사용해야한다는 것을 의미하며 정확한 반올림을 위해 충분한 비트를 생성했을 때를 결정하기위한 기준을 개발해야합니다. 정확한 변환을위한

기본적인 알고리즘은 지난 세기에서 수십 년에 걸쳐 개발되었으며, 다음과 같은 출판물에 설명되어 있습니다

데이비드 W. Matula을, '전환 및 아웃에서 ". ACM의 통신, Vol. 11, 1 호 (1968 년 1 월), 47-50

David W. Matula, "부동 소수점 숫자 변환의 공식화". 컴퓨터, 권 10, 제 8 호 (8 월 1970), PP에 IEEE 거래. 681-692 (online)

윌리엄 D. 클린저는 "어떻게 정확하게 부동 소수점 숫자를 읽는". SIGPLAN 고지 사항, Vol. 25, No. 6 (June 1990), pp. 92-101 (online)

David M. Gay, "올바르게 반올림 된 이진수 10 진수 및 10 진수 - 이진 변환" & T 벨 Laboraties AT 기술 보고서 ​​90--10, 1990 년 11 월 (online)

이 연구 분야에서 신선한 모습 다음 책에 의해 제공됩니다 :

미셸 해킹, "에 대한 중간 정밀 필요에 10 진수 - 2 진 부동 소수점 변환을 올바르게 반올림합니다. " 실재 번호 및 컴퓨터 회의록 (RNC'6), 2004 년 11 월,113-133 (online)

Aubrey Jaffer, "쉬운 정확한 부동 소수점 읽기 및 쓰기". arXiv : 1310.8121, 초안 v6 (2015 년 1 월), (online)

근본적인 알고리즘은 25 년 전부터 있었지만 상당히 복잡하고 "악마가 세부 사항에 있습니다". 정확함 십진수에서 소수점 이하로 변환하는 구현은 계속해서 파악하기 어렵습니다. 마지막 항목은이 원인이 어디에서 지난 5 년 동안, 릭 레이건의 블로그 "Exploring Binary"Microsoft Visual C/C++, glibc, 및 PHP, 등 널리 사용되는 소프트웨어의 진수 - 투 - 바이너리 변환 기능의 결함의 수를, 역사에있다 서비스 거부 (DoS) 공격에 악용 될 수있는 무한 루프.

Vern Paxson과 William Kahan의 논문은 10 진수에서 2 진수로 변환하기 어려운 경우의 문제를 해결하고 정확한 반올림에 필요한 대상 정밀도를 초과하는 추가 비트 수를 보여주는 몇 가지 예제를 제공합니다.

V. Paxson 및 W. Kahan, "IEEE 10 진수 - 이진 변환 테스트 용 프로그램". 원고, 5 월 1991 년 (online)

추가 힘든 라운드의 경우 IEEE-754 binary64 프레드 Tydeman하여 뉴스 그룹 comp.arch.arithmetic에 1996 posting에 나열된.

다음과 같은 용지는 그러나 테스트 벡터를 포함하는 파일을 더 이상 액세스 온라인 내가 지난번에 없었다, 테스트 변환을위한 테스트 프레임 워크에 대해 설명

브리짓 Verdonk, 애니 Cuyt, 데니스 Verschaeren. "부동 소수점 산술 II를 테스트 할 수있는 정밀도와 범위에 독립적 인 툴 : 변환" 수학적 소프트웨어의 ACM 트랜잭션, Vol. 27, No. 1 (Mar. 2001), pp. 119-140. (draft online)

관련 문제