Math 当最后一个小数点不是';时,如何从二进制转换为IEEE754;t5?

Math 当最后一个小数点不是';时,如何从二进制转换为IEEE754;t5?,math,binary,floating-point,ieee-754,Math,Binary,Floating Point,Ieee 754,我能找到的所有信息都是简单地乘以2,直到小数点解为零,但这只有在最后一个小数点是5时才有效 在我的特殊情况下,要转换的数字是98765.4321,我如何将它(或任何其他无法解析的十进制数)转换为IEEE754?我将假设问题如下:我们得到一个数字,它被指定为一个十进制数字序列,可能包含一个小数,并且可能使用科学记数法。如何将该数字正确转换为浮点标准指定的二进制浮点格式之一,即binary16(半精度)、binary32(单精度)、binary64(双精度)或binary128(四精度) 正如您所注

我能找到的所有信息都是简单地乘以2,直到小数点解为零,但这只有在最后一个小数点是5时才有效


在我的特殊情况下,要转换的数字是98765.4321,我如何将它(或任何其他无法解析的十进制数)转换为IEEE754?

我将假设问题如下:我们得到一个数字,它被指定为一个十进制数字序列,可能包含一个小数,并且可能使用科学记数法。如何将该数字正确转换为浮点标准指定的二进制浮点格式之一,即
binary16
(半精度)、
binary32
(单精度)、
binary64
(双精度)或
binary128
(四精度)

正如您所注意到的,大多数十进制数字不能以二进制浮点格式精确表示。这意味着我们需要选择一种IEEE-754取整模式来确定最终结果:朝正无穷大取整(“向上”)、朝负无穷大取整(“向下”)、朝零取整(截断)或朝最近或偶数取整(“最近”)。十进制到二进制转换通常使用列出的最后一种模式,四舍五入到最近或偶数,因为这样可以最大限度地减少转换中的总体误差

从概念上讲,我们的任务很简单。执行转换过程,直到生成足够的位以做出正确的舍入决定。显然,我们通常需要比目标格式提供更多的位。然而,我们不能确切地告诉隐修会我们需要多少位,因为一些难以取整的案例将产生非常接近平局案例的结果。带回家的信息是,我们算法的某些部分将需要使用某种扩展精度(或多精度)算法,我们需要制定一个标准来确定何时生成了足够的位以进行正确的舍入

正确转换的基本算法是在上个世纪的几十年中发展起来的,并在以下出版物中进行了描述:

David W.Matula,“进出转换”。ACM通讯,第11卷,第1期(1968年1月),第47-50页

David W.Matula,“浮点-数字-基转换的形式化”。IEEE计算机学报,第10卷,第8期(1970年8月),第681-692页()

William D.Clinger,“如何准确读取浮点数”。SIGPLAN公告,第25卷,第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,第六版草稿(2015年1月),()

虽然基本算法已经存在了25年,但它们相当复杂,“魔鬼在于细节”。十进制到二进制转换的正确实现仍然难以实现。在过去5年中,Rick Regan的博客记录了广泛使用的软件在十进制到二进制转换功能方面的一些缺陷,例如 , , 以及, 其中最后一项将导致无限循环,可能被利用进行拒绝服务攻击

Vern Paxson和William Kahan的一篇论文讨论了十进制到二进制转换中难以舍入的情况,并给出了一些示例,说明正确舍入可能需要多少超出目标精度的额外位:

V.Paxson和W.Kahan,“测试IEEE十进制-二进制转换的程序”。手稿,1991年5月()

Fred Tydeman于1996年向新闻组
comp.arch.Artimum
提交的一份报告中列出了IEEE-754
binary64
的其他难以舍入的案例

下面的文章描述了一个测试转换的测试框架,但是在我上次检查时,包含测试向量的文件不再可以在线访问:


Brigitte Verdonk、Annie Cuyt和Dennis Verschaeren。“用于测试浮点运算的精度和范围无关的工具II:转换”,《数学软件ACM交易》,第27卷,第1期(2001年3月),第119-140页。()

我假设问题如下:我们得到一个数字,它被指定为一个十进制数字序列,可能包含一个十进制小数,并且可能使用科学符号。如何将该数字正确转换为浮点标准指定的二进制浮点格式之一,即
binary16
(半精度)、
binary32
(单精度)、
binary64
(双精度)或
binary128
(四精度)

正如您所注意到的,大多数十进制数字不能以二进制浮点格式精确表示。这意味着我们需要选择一种IEEE-754取整模式来确定最终结果:朝正无穷大取整(“向上”)、朝负无穷大取整(“向下”)、朝零取整(截断)或朝最近或偶数取整(“最近”)。十进制到二进制转换通常使用列出的最后一种模式,四舍五入到最近或偶数,因为这样可以最大限度地减少转换中的总体误差

从概念上讲,我们的任务很简单。执行转换过程,直到生成足够的位以做出正确的舍入决定。显然,我们通常需要比目标格式提供更多的位。然而,我们不能确切地告诉修道院我们需要多少比特,因为有些比特很难圆