Floating point 如何将浮点文字转换为指数和尾数?

Floating point 如何将浮点文字转换为指数和尾数?,floating-point,Floating Point,假设我有一个包含浮点数的字符串(例如:“3.14159265358979”),我想将其转换为浮点数。 我将如何计算指数和尾数以获得相应的浮点表示 如何为我要转换的数字找到合适的指数?如何计算相应的尾数值来表示浮动 PS:我想为任意精度浮点计算编写一些代码。首先,记住符号(+或−) 并将数字更改为其绝对值 将[1,2]中的有效位标准化并计算指数: 如果数字大于2,则将其除以2,直到它位于[1,2]中。(即1到2之间的间隔,包括1,但不包括2。)除以的次数将是指数 如果该数字小于1,则将其乘以2,

假设我有一个包含浮点数的字符串(例如:“3.14159265358979”),我想将其转换为浮点数。 我将如何计算指数和尾数以获得相应的浮点表示

如何为我要转换的数字找到合适的指数?如何计算相应的尾数值来表示浮动

PS:我想为任意精度浮点计算编写一些代码。

首先,记住符号(+或−) 并将数字更改为其绝对值

将[1,2]中的有效位标准化并计算指数:


  • 如果数字大于2,则将其除以2,直到它位于[1,2]中。(即1到2之间的间隔,包括1,但不包括2。)除以的次数将是指数

  • 如果该数字小于1,则将其乘以2,直到它位于[1,2]中。指数将是乘以次数的负数

  • 如果数字已经在[1,2]中,则指数为零。将[1,2]中的数字转换为二进制

然后将数字四舍五入以适应浮点格式的有效位:

  • 将数字四舍五入到有效位允许的位数。如果这会将数字增加到2,则将其除以2,并将1添加到指数中

现在你有了符号、指数和有效位。

事实上,这是许多文章的主题,即如何正确操作,特别是对于1.345e300或2.7e-200这样的情况。关于一种方法的一个很好的解释可以在这里找到:。该网站对其他方法也有其他解释。如你所见,该代码需要大整数(任意精度整数)。其他方法(如David Gay事实上的标准实现STROD)也需要大整数。但大小数、大浮点数或大有理数都使用大整数,因此您可能应该从实现大整数开始。一旦实现了大整数,它就会变得容易得多。或者使用现有的包,例如。编写一个比这更好的库会非常困难。如果数字大于2,则divi将它除以2,直到它在[1,2]中。(即从1到2的间隔,包括1,但不包括2。)除以的次数将是指数。如果该数字小于1,则将其乘以2,直到它在[1,2]中。指数将是乘以次数的负数。如果该数字已经在[1,2]中[1,2],指数为零。将[1,2]中的数字转换为二进制。将其四舍五入到有效位中的任意位数。结果为有效位。除非您可能希望分隔符号。@EricPostpischil如果您将其作为答案发布,我可以接受它作为答案!