0

我基本上汇总了一个非常大的数字。我正在使用浮点数,因为我想保持精度水平,但它只能达到 100k。这是一些示例输出。

 x 361 y 800 width 530 h 800 intensity 93581.52477873862
 x 362 y 800 width 530 h 800 intensity 93829.5759344697
 x 363 y 800 width 530 h 800 intensity 94079.55780857801
 x 364 y 800 width 530 h 800 intensity NaN
 x 365 y 800 width 530 h 800 intensity NaN
 x 366 y 800 width 530 h 800 intensity NaN

我试过双倍等,但没有运气!有人对最好使用什么有任何想法吗?

谢谢

4

4 回答 4

2

float可以“高于 10k”,并且double始终是首选。如果数字变得非常大并且您需要所有数字,请使用BigDecimal.

如果你不能超过 10k,那么你的计算中有一些“其他”问题。

于 2012-10-01T21:20:11.933 回答
2

尝试BigDecimal。它保持您想要的精度(例如小数位数)。

于 2012-10-01T21:19:57.877 回答
0

浮动可以比这更高 - 例如尝试:

    float x = 1000000000000000000000000000000000000.0f; 
    System.out.println(x);
    System.out.println(x*x);

输出:

1.0E36
Infinity

所以还有其他问题。请注意,使用非常大的数字会导致Infinitynot NaN

您的代码是否无意中将零除以零或类似的东西?您正在执行的实际计算是什么?

另请参阅此问题以获取有关 NaN 含义的一些信息。

于 2012-10-01T21:27:36.627 回答
0

您遇到的问题与您认为的不同。

事实 1:浮点数可以远大于 10k。大约 3400000000000000000000000000000000000k。

事实 2:浮点加法溢出导致无穷大,而不是 NaN(非数字)。

你在某个地方的数学有错误。x 364 处的计算会导致一些算术错误,这会弄乱你的总和。精度不是问题。

于 2012-10-01T21:29:46.437 回答