我基本上总计了一个非常大的数字。我正在使用float,因为我想保持精度水平,但它只能达到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
我尝试了双重等,没有运气!任何人对什么是最好用的有任何想法?
由于
答案 0 :(得分:2)
试试BigDecimal。它保持你想要的精度(例如小数位数)。
答案 1 :(得分:2)
float
可以“高于10k”,double
始终是首选。如果数字变得非常大并且您需要所有数字,请使用BigDecimal
。
如果你不能超过10k,那么你的计算中会出现一些“其他”问题。
答案 2 :(得分:0)
浮动可以比这更高 - 例如尝试:
float x = 1000000000000000000000000000000000000.0f;
System.out.println(x);
System.out.println(x*x);
输出:
1.0E36
Infinity
所以其他错误。请注意,使用非常大的数字会导致Infinity
而不是NaN
。
您的代码是否无意中将零除以零或类似的东西?您正在执行的实际计算是什么?
有关NaN含义的一些信息,另请参阅this question。
答案 3 :(得分:0)
你遇到的问题与你认为的不同。
事实1:浮动可以远远超过10k。大约340000000000000000000000000000k。
事实2:浮动加法溢出导致无穷大,而不是NaN(非数字)。
你的数学错误。在x 364处的计算导致一些算术错误,这会弄乱你的总和。精度不是问题。