【发布时间】:2010-12-05 21:09:32
【问题描述】:
是否存在与 C/C++ 函数等效的 Java 函数 frexp?如果您不熟悉,则 frexp 是 defined by Wikipedia,用于“将浮点数分解为尾数和指数”。
我正在寻找一种速度和准确性兼备的实现,但如果我只能选择一个,我宁愿获得准确性。
这是来自第一个参考的代码示例。它应该使 frexp 合约更加清晰:
/* frexp example */
#include <stdio.h>
#include <math.h>
int main ()
{
double param, result;
int n;
param = 8.0;
result = frexp (param , &n);
printf ("%lf * 2^%d = %f\n", result, n, param);
return 0;
}
/* Will produce: 0.500000 * 2^4 = 8.000000 */
【问题讨论】:
-
我认为 Apache Commons Math 包可能是找到这个的好地方,但我没有在其中看到任何东西。也许您可以为此提出功能请求?或者,如果您决定自己编写代码,请与他们讨论将其包含在库中 - 对我来说似乎是一个有用的补充。
-
@Carl,我同意它会很有用。不过,我非常了解自己和我的工作量,所以我不会致力于尝试自己创建它。我确信我可以用我必须投入的时间正确地完成 80% 的工作 80%,这几乎比无用更糟糕......
-
真正的问题是:为什么 frexp 不会将浮点数分解为两个整数,但至少需要一个浮点数。对于没有意义的浮点分解(想想递归...... )
-
@Nils,实际上,没有任何递归。结果值定义在 0.5 和 1.0 之间。在这种情况下,指数将始终为零。
标签: java c++ c floating-point math.h