Math.scalb用于什么?

时间:2014-12-01 04:01:42

标签: java math

只是仔细阅读文档并找到这个奇怪的函数Math.scalb()。只是想知道是否有人有使用此功能的经验。你会用Math.scalb做什么样的事情?

3 个答案:

答案 0 :(得分:1)

函数java.lang.Math.scalb(float f,int scaleFactor),而不是以下内容(一个班次,一个转换和一个双倍乘法):

double a = Integer.doubleValue(1 << scaleFactor);
f *= a;

double a = Math.pow(2, scaleFactor);
f *= a;

它使用的事实是已经以floating point format形式编写了一个double,例如参见http://en.wikipedia.org/wiki/Floating_point。因此只需添加一个:

exponent += scaleFactor;

明确处理角落案件,如文件详细说明。所以它习惯于做一个有效的f * 2 ^ scaleFactor


一些参考:根据http://www.ibm.com/developerworks/library/j-math2/#scalb

  

例如,在使用Apple的Java 6 VM进行测试时,Math.scalb()的重现性比x * Math.pow(2,y)快两个数量级

答案 1 :(得分:1)

它用于指数重试机制。

以下是Android框架中的一种用法:

// Retry after exponential backoff timeout
final long timeoutMs = (long) Math.scalb(BACKOFF_MILLIS, mConnectionBackoffAttempts);
mHandler.postDelayed(mConnectionRunnable, timeoutMs);
mConnectionBackoffAttempts++;

答案 2 :(得分:0)

java.lang.Math.scalb(float f,int scaleFactor)返回f x 2scaleFactor四舍五入,就好像由一个正确舍入的浮点乘以双精度值的成员一样。有关详情,请参阅此http://www.tutorialspoint.com/java/lang/math_scalb_float.htm