pow函数在java.lang.Math类中,是求次方的函数,定义为:

public static double pow(double a, double b);

即求a的b次方,例如:

public static void main(String[] args) {
double a = 2.0D;
double b = 4.0D;
double r = Math.pow(a, b);
System.out.println(r);
//输出为16.0
}

查看源码,发现其实现调用了StrictMath类的pow函数,并且,Math中很多函数都调是直接调用了StrictMath类中的函数,而在StrictMath类中方法用native修饰,表明调用的并非java代码,而是其它的。经了解,这里是C代码来实现这些方法的,而这些源码在jdk中并没有公布。

遂思考如何用java来实现呢?最先想到用循环和递归两种方式可实现。如下:

为简化逻辑实现,只考虑了自然数(0和正整数)次幂。

1、循环实现:

static int mypow(int x, int y)
{
if(y < 0){
return 0;
}
if(y == 0){
return 1;
}
if(y == 1){
return x;
}
int result = x;
for (int i = 1; i < y; i++) {
result *= x;
}
return result;
}

2、递归实现:

static int mypow(int x, int y)
{
if(y < 0){
return 0;
}
if(y == 0){
return 1;
}
if(y == 1){
return x;
}
int result = 0;
int tmp = mypow(x, y/2);
if(y % 2 != 0) //奇数
{
result = x * tmp * tmp;
}else{
result = tmp * tmp;
}
return result;
}

注:本文所述内容基于JDK1.7。

水平有限,上述观点难免有误,仅供参考。欢迎牛们拍砖!

Math.pow用法及实现探究的更多相关文章

  1. javascript Math.pow 函数 详解

    语法 Math.pow(x,y) 定义和用法 pow() 方法可返回 x 的 y 次幂的值. 处理简单数学问题 6的4次方等于1296,记作:64=1296; 求值: Math.pow(6,4)=12 ...

  2. javascript Math.pow 函数 详解 【附】年均增长率计算

    语法 Math.pow(x,y) 定义和用法 pow() 方法可返回 x 的 y 次幂的值. 处理简单数学问题 6的4次方等于1296,记作:64=1296; 求值: Math.pow(6,4)=12 ...

  3. JS中的Math.pow(a,b)方法

    定义和用法 pow() 方法可返回 x 的 y 次幂的值. 语法 Math.pow(x,y) 参数 描述 x 必需.底数.必须是数字. y 必需.幂数.必须是数字. 返回值 x 的 y 次幂. 说明 ...

  4. Math.pow

    一个Math函数,例如:Math.pow(4,3);返回4的三次幂,用法:Math.pow(x,y) x 必需传.底数.必须是数字. y 必需传.幂数.必须是数字. 如果结果是虚数或负数,则该方法将返 ...

  5. Javascript四舍五入(Math.round()与Math.pow())

    代码 Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ ...

  6. 定义一个数,它可能为正 也可能为负 var num = Math.pow(-1,parseInt(Math.random() * 2) + 1);

    // 定义一个随机数范围从0 ~页面宽度 var x = parseInt(Math.random() * myCanvas.width); // 定义一个随机数 范围从0 ~页面高度 var y = ...

  7. Math.pow();Math.sqrt();

    //Math.pow(a,b)功能是a的b次方 (int)Math.sqrt(n):先对n开方,然后转成int类型//例如,(int)Math.sqrt(2)=(int)1.414=1 Math.ab ...

  8. JavaScipt中的Math.ceil() 、Math.floor() 、Math.round()、Math.pow() 三个函数的理解

    以前一直会三个函数的使用产生混淆,现在通过对三个函数的原型定义的理解,其实很容易记住三个函数. 现在做一个总结: 1. Math.ceil()用作向上取整. 2. Math.floor()用作向下取整 ...

  9. [Algorithm] Write your own Math.pow function in Javascript, using Recursive approach

    /**@abstract * Write your own Math.pow(a int, b int) function * */ function pow (a, b) { let result ...

随机推荐

  1. Ceph部署(二)RGW搭建

    背景 Ceph RGW简介 Ceph RGW基于librados,是为应用提供RESTful类型的对象存储接口.RGW提供两种类型的接口: 1) S3:兼容Amazon S3RESTful API: ...

  2. 什么是Git?

    其实我在写这篇随笔的时候连Git是什么都不知道,只是听说过,也注册了一个GitHub的账号,但并不会玩. 我也是查看了半天的网页才明白一个大概,但我觉得以后肯定会经常用到它. 简单的来说, Git 是 ...

  3. 规范 : 过程 : login cookies sessionTimeOut

    规范 用户登入网站将得到一个cookies,如果用户有2个account,各别登入admin page 和 client page,是会得到2个cookies. 在reload page时,后台会得到 ...

  4. 文件上传----FTP部署

  5. Form表单中method="post/get'的区别

    Form提供了两种数据传输的方式--get和post.虽然它们都是数据的提交方式,但是在实际传输时确有很大的不同,并且可能会对数据产生严重的影响.虽然为了方便的得到变量值,Web容器已经屏蔽了二者的一 ...

  6. Struts2之访问路径

    上一篇已经和大家分享了关于Struts2命名空间和Action的三种创建方式,本篇我们接着命名空间的内容,来一起探讨一下关于Struts2的访问路径问题,何为访问路径,就是指当我们在浏览器输入地址,点 ...

  7. 《深入理解Java虚拟机》学习笔记之内存分配

    JVM在执行Java程序的过程中会把它所管理的内存划分若干个不同的数据区域,如下图: 大致可以分为两类:线程私有区域和线程共享区域. 线程私有区域 程序计数器(Program Counter Regi ...

  8. jQuery后续...

    jQuery 选择器 1.jQuery选择器的简介 (1). Jquery中的选择器完全继承了CSS的风格,利用Jquery选择器,可以非常便捷和快速的找出特定的Dom元素,然后为他们添加相应的行为, ...

  9. 出现http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException异常

    解决方案 1.在eclipse的菜单中,进入Window > Preferences > Java > Installed JREs > Execution Environme ...

  10. wemall doraemon中Android app商城系统工具集合类,包含各种程序中用到的静态方法

    wemall doraemon中Android app商城系统工具集合类,包含各种程序中用到的静态方法,可用于其他商城或者系统的编程参考 package cn.zzu.edu.wemall.utils ...