只是仔细阅读文档并找到这个奇怪的函数Math.scalb()。只是想知道是否有人有使用此功能的经验。你会用Math.scalb做什么样的事情?
答案 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;
它使用的事实是已经以形式编写了一个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