【发布时间】:2015-09-09 06:23:50
【问题描述】:
假设我有一个算法,我可以通过它计算一个无限精确的浮点数(取决于参数 N)让我们用伪代码说:
arbitrary_precision_float f = computeValue(n); //it could be a function which compute a specific value, like PI for instance.
我想我可以用 gnump 库的库 mpf 来实现computeValue(int),例如...
无论如何,我如何将这样的数字拆分为浮点数的总和,其中每个数字都有L尾数位?
//example
f = x1 + x2 + ... + xn;
/*
for i = 1:n
xi = 2^ei * Mi
Mi has exactly p digits.
*/
我不知道我是否清楚,但我正在寻找“简单”的东西。
【问题讨论】:
-
为什么不简单地将
f的(二进制)符号分成p数字组? -
因为标准化的东西?
-
抱歉,您能再澄清一下吗?
-
如果数字是固定的,我想你可以简单地按照你说的做。在浮点数的情况下,我的意思是从“f”派生一个或多个浮点数,其中精度固定为参数“p”,这意味着还为每个这样的值派生一个指数。例如...假设您有一个浮点“f”,其中尾数(前导 1)为 10010001,如果我应用直接拆分,我有 x1 与尾数 1001 和 x2 与尾数 0001,x2 未标准化,而且我需要导出每个指数的指数。
-
指数可以很容易地从原始尾数中分割部分的位置推导出来。之后,如果某个值以 0 开头,您只需移动其值并更改其指数(使 x2=1000 并将指数减 3)。或者,如果您想要最少数量的此类数字,那么这是一个单独的问题。
标签: algorithm floating-point floating-accuracy floating-point-conversion