簡體   English   中英

當最后一個十進制不是5時,如何從二進制轉換為IEEE754?

[英]How do you convert from binary to IEEE754 when the last decimal isn't 5?

我所能找到的所有內容都是簡單地乘以2直到小數變為零,但這僅在最后一個小數為5時才有效。

在我的特殊情況下,要轉換的數字是98765.4321,我如何將其(或任何其他無法解析的小數)轉換為IEEE754?

我將假設問題如下:我們給了一個指定為十進制數字序列的數字,該數字可能包含小數,並可能使用科學計數法。 我們如何正確地將此數字轉換為IEEE 754浮點標准指定的二進制浮點格式之一,即, binary16 (半精度), binary32 (單精度), binary64 (雙精度)或binary128 (四精度) )?

如您所述,大多數十進制數字不能完全以二進制浮點格式表示。 這意味着我們需要選擇一種IEEE-754舍入模式用於確定最終結果:朝正無窮大(“向上”)舍入,朝負無窮大(“向下”)舍入,向零舍入(截斷) ,或朝着最近或偶數(“最近”)取整。 十進制到二進制的轉換通常使用列出的最后一個模式,朝着最近或偶數取整,因為這樣可以最大程度地減少轉換中的總體誤差。

從概念上講,我們的任務很簡單。 進行轉換過程,直到我們生成足夠的位以做出正確的舍入決策為止。 顯然,我們經常需要比目標格式提供的位數更多的位。 但是,我們無法准確地告訴a-priory我們需要多少位,因為一些難以取舍的情況將產生非常接近平局的結果。 要注意的是,我們算法的某些部分將需要使用某種擴展的精度(或多精度)算法,並且我們需要開發一個標准來確定何時我們生成了足夠的位以進行正確的舍入。

正確轉換的基本算法是在過去一個世紀的幾十年中開發的,並在以下出版物中進行了介紹:

David W. Matula,“內外轉換”。 通信ACM ,卷。 11,No.1(1968年1月),第47-50頁

David W. Matula,“浮點數值基數轉換的形式化”。 IEEE Transactions on Computers ,第10卷,第8號(1970年8月),第681-692頁( 在線

威廉·克林格(William D. Clinger),“如何准確讀取浮點數”。 SIGPLAN通告 ,卷。 25,No.6(1990年6月),第92-101頁( 在線

David M. Gay,“正確舍入二進制十進制和十進制二進制轉換”。 技術報告90--10,AT&T貝爾實驗室,1990年11月。( 在線

以下出版物對本研究領域進行了重新審視:

Michel Hack,“關於正確舍入十進制到二進制浮點轉換所需的中間精度”。 實數與計算機學報(RNC'6) ,2004年11月,第113-133頁( 在線

Aubrey Jaffer,“輕松准確地讀取和寫入浮點數”。 arXiv:1310.8121,草案v6(2015年1月),( 在線

盡管基本算法已經問世了25年,但是它們卻具有相當大的復雜性,“細節決定成敗”。 十進制到二進制轉換的正確實現仍然難以捉摸。 在過去的5年中,Rick Regan的博客“ Exploring Binary”已經記錄了廣泛使用的軟件(如Microsoft Visual C / C ++glibcPHP)的十進制到二進制轉換功能中的許多缺陷,最后一項會導致無限循環,可能被利用來進行拒絕服務攻擊。

Vern Paxson和William Kahan的論文解決了十進制到二進制轉換中難以舍入的情況,並提供了一些示例來說明正確舍入可能需要超出目標精度的額外位數:

V. Paxson和W. Kahan,“用於測試IEEE十進制-二進制轉換的程序”。 原稿,1991年5月( 在線

附加難圓的情況下為IEEE-754 binary64在1996年被列入張貼到新聞組comp.arch.arithmetic由Fred Tydeman。

以下論文描述了用於測試轉換的測試框架,但是包含測試向量的文件在我上次檢查時不再可以在線訪問:

Brigitte Verdonk,Annie Cuyt和Dennis Verschaeren。 “用於測試浮點運算II:轉換的與精度和范圍無關的工具。” ACM Transactions on Mathematical Software ,第一卷。 27,No.1(2001年3月),第119-140頁。 在線草稿

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM