创建Java ME Math.pow()方法 - 编程入门网
op
while( n > 0 )
{
double a = n; //proxy for n
// find ''a'', the value of ''n'' to the power of denominator
for( int i = 1; i < den; i++ )a *= n;
// compare ''a'' to ''z''. Is the value within the hundred-thousandth?
// if so, return ''n''.
double check1 = a-z;
double check2 = z-a;
if( check1 < .00001|| check2 > .00001 ) return n;
n *= .999;// We arbitrarily use a decay of .1% per iteration
}
// value could not be found, return -1.
return -1.0;
}
本示例演示了衰变算法的使用方法。您会注意到,n 的值(解的估计值)将按 1% 强制递减。您可能需要根据编程精度要求来改变此值。也 可能考虑包括编程逻辑,该逻辑用于将前一迭代解与当前迭代进行比较,然后,如果有改善继续进行迭代,但是,如果解已回归,则返回前一 个值。 这里讲述的解只处理正指数。如果值为负会出现什么情况呢?下面我们将解决这种意外情况。 创建Java ME Math.pow()方法(3)时间:2011-07-20 aniel Williams处理负指数 要再增加一层复杂度,假定正在向 Math.pow() 方法传递负指数。在这种情况下,指数为负,一种简单的解决方案是将底数转换为小数,使 指数为正。例如,8-2 可转换为 (1/8)2。我们以可编程的方式用底数 x 来除 1,用 -1 来乘 y(参见示例 6)。
现在,我们已经讨论了用于在 Java ME 中估计幂函数的“强力”几何衰变算法。读者会注意到,对于较大的底数和指数分子组合,朴素的 “强力”试探性方法有性能问题。请考虑示例 85/2。使用此算法的起始值将为 85 = 32,768。如果使用 1% 的衰变,则要求全部 5196 次迭代 都求该解,这样几乎达不到最优。谨记此事实并且不提供改善的试探性搜索算法,我们转到二次逼近,这会提供更多合理的迭代要求。 使用 Math.sqrt() 方法的 ME Math.pow() 开发我们的 Math.pow() 方法的第二种方法是通过使用 Math.sqrt() 方法(参见示例 7)。使用Math.sqrt() 方法要求我们对具有偶分母 的幂进行估计。例如,n = 82/3 => n3 = 82 是一个棘手问题,因为我们需要立方根,而非平方根。为了调整示例中的此问题,我们我们就 对两端再求一次平方:n3 = 82 => n6 = 84。然后,我们就可以继续进行,恰好在两次迭代之内求出解。 当然,我们的 ME Math.pow() 方法的指数不会以分子和分母的形式开始,而是向我们传递一个实数。我们将此实数转换为具有偶分母的小 数,然后利用相应的平方根数来对 n 求解。在我们的 n = 82/3 示例中,我们进行如下转换:
我们选择 1024 作为分母,因为对平方根函数迭代 10 次将得到 n 的值。特别指出,(n1024)(1/(2^10)) = n。当然,我们可能需要根据方 程右侧的大小来减少迭代次数。示例 7 演示了这种方法。
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |