创建Java ME Math.pow()方法

使用 Java 开发移动设备应用程序时,可能需要用到特定 Java VM 所没有的数学方法。本文将专门解决 Java ME 没有“幂”方法 Math.pow() 的问题。我们将演示使用三种不同的方法开发同一个 ME 应用程序,并从中选出最佳的编程解决方案。

要讨论此问题,我们先考察整数和分数幂参数,将我们的分析限于正实数。我们将演示求整数问题和小数问题的解集相对而言比较容易(而 不考虑指数的符号)。在大多数情况下,我们将使用示例问题 n = 82/3,其中我们会求出 n 的良好估计或实际解。如果初始指数事先不可用 ,则此问题的其他解(包括牛顿法和割线法)不易编程。虽然二分法是可行的解决方案,但我们将关注传统上不为人所探究的三个方法。第一 个是简单的(不过有时效率低下)几何衰变算法;而第二个方法将利用 Math.sqrt() 方法并保证在不超过 11 次迭代中收敛到一个近似解。第 三个方法将使用泰勒级数逼近法求对数并对泰勒级数进行欧拉转换。

产生整数解的 ME Math.pow() 方法

传统上,Java Math.pow() 方法包含两个参数。这两个参数包括底数和指数。我们假定(最初)这两个参数均为整数,然后求出 ME 中与 Java 方法使用相同参数的 Math.pow() 方法的可编程解。此处,可编程解相当简单,如示例 1 所示。在本例中,我们仅运行以指数值为指标 的倍乘循环。

示例 1
int pow( int x, int y) /*we define the power method with
     base x and power y (i.e., x^y)*/
{
   int z = x;
   for( int i = 1; i < y; i++ )z *= x;
   return
}

当然,有人可能会发现需要求出非整数幂的值。正实数的简单解(无需访问 Math.pow() 方法)可能涉及使用 Math.log()。例如,请考虑 82/3 的情况。利用 2/3*ln(8) = 1.386294361 中自然对数的结果。要得到最终解,需要利用指数 1.386294361(特别指出 e1.386294361 = 4 )。在这种情况下,可能不需要使用幂函数。遗憾的是,Java ME 也不支持 Math.log() 方法。没有 Math.pow() 或 Math.log() 方法时,我 们会考虑使用朴素的“强力”试探性方法,应用 Math.sqrt() 方法以及自然对数(和欧拉 e)的泰勒级数逼近来求得 Java ME 问题的解。

使用几何衰变算法作为强力解的 ME Math.pow()

Java ME 的早期实现包括浮点主数据类型 float 和 double。最近,已添加了这些类型。现在我们将 Math.pow() 声明中的整型参数替换为 double 数据类型。

可能需要在 Java ME Math.pow() 幂方法中使用小数指数。我们提供的生成 Math.pow() 的第一种方法是使用几何衰变算法的朴素的“强力 ”试探性方法。简单而言,衰变算法以一个大于已知解的值开始,然后应用某个方法来衰变该值,直到该值非常逼近该解(有关简单线性衰变 算法的演示,请参见示例 2)。在我们的例子中,将进一步演示向上述解收敛的几何形式。

示例 2
/* This example illustrates a simplistic decay algorithm that we will assume
converges to our desired solution (a positive integer) */
int n; // assume that n is the solution to the number we are trying to find
int varX = 1000; //assume that we know the solution is less than or equal to 1000
while( varX > 0 )
{
   varX -= 1; // decrement by 1
   if( varX == n)return varX;
}

在示例 2 中,我们从 1000 开始递减,直到找到预期的数字,假定预期数字是一个正整数。这种类型的算法构成了强力试探性方法的基础 。

时间: 2024-11-01 23:00:50

创建Java ME Math.pow()方法的相关文章

如何处理java的Math.pow()计算的误差

问题描述 Java中12*Math.pow(10, -1)的计算结果是1.2000000000000002,怎样让幂计算得出正确的结果,项目中有大量类似的幂计算. 解决方案 精确运算需要使用BigDecimal解决方案二:再精确的计算都需要一个精度的表示范围.如果对精度要求较高,表示范围较大, 用BigDecimal.解决方案三:用BigDecimal进行运算.解决方案四:我建议控制精度,即定义各子系统支持的最大精度,在运算时,只保留到精度即可.当然,如果你的精度要求很高,请转换成整数计算,通过

java中jieguo=Math.pow(2.5);的问题

问题描述 java中jieguo=Math.pow(2.5);的问题 结果是32,那省略Math可以吗,写成math可以吗,Math是一个类吧,math是Math类的一个对象吧,为什么pow方法只有参数,没有方法体,要导入相应的库和包么 解决方案 谔谔..你是初学java 吧. Math代表的是个类.Java定义规范 类名必须大写,java对大小写进行区分的,所以 你写成 math 是不对的. math 是Math类的一个对象不对,首先,Math类只是个工具类,java定义不可修改,并且不允许实

Java创建ZIP压缩文件的方法_java

本文实例讲述了Java创建ZIP压缩文件的方法.分享给大家供大家参考.具体如下: 这里注意:建议使用org.apache.tools.zip.*包下相关类,否则可能会出现中文乱码问题. /** * 压缩文件夹 * @param sourceDIR 文件夹名称(包含路径) * @param targetZipFile 生成zip文件名 * @author liuxiangwei */ public static void zipDIR(String sourceDIR, String target

java取绝对值math.abs函数使用方法

兼容类型如下 static double abs(double a) 返回 double 值的绝对值. static float abs(float a) 返回 float 值的绝对值. static int abs(int a) 返回 int 值的绝对值. static long abs(long a) 返回 long 值的绝对值.  代码如下 复制代码 package com.java.lang;   public class Math {    /**   * @param args  

java产生随机数的方法

最明显的,也是直观的方式,在Java中生成随机数只要简单的调用: java.lang.Math.random()  在所有其他语言中,生成随机数就像是使用Math工具类,如abs, pow, floor, sqrt和其他数学函数.大多数人通过书籍.教程和课程来了解这个类.一个简单的例子:从0.0到1.0之间可以生成一个双精度浮点数.那么通过上面的信息,开发人员要产生0.0和10.0之间的双精度浮点数会这样来写: Math.random() * 10  而产生0和10之间的整数,则会写成: Mat

基于Java中Math类的常用函数总结_java

Java中比较常用的几个数学公式的总结: //取整,返回小于目标函数的最大整数,如下将会返回-2 Math.floor(-1.8): //取整,返回发育目标数的最小整数 Math.ceil() //四舍五入取整 Math.round() //计算平方根 Math.sqrt() //计算立方根 Math.cbrt() //返回欧拉数e的n次幂 Math.exp(3); //计算乘方,下面是计算3的2次方 Math.pow(3,2); //计算自然对数 Math.log(); //计算绝对值 Mat

不使用Math.random方法生成随机数(随机数生成器)_java

由于一些不可控因素的影响,比如系统内存,计算机状态等,每一次在while循环中执行的次数会有一定差异大概几百次.这就导致了结果的差异.注意这个程序使用了许多静态变量,也就是说,在下一个线程继续执行与上一个线程相同的run方法时,其初始值是上一个线程执行后的值,这形成了经典的蝴蝶效应,通过将这个差异放大,导致最终随机数的产生.在这个程序中,一共开启了13个thread线程,每一次都会将那几个静态变量的值向混乱的方向推动,于是最后得到的数组double[] bb的混乱程度几何上升,最开始的bb[0]

java的抽象类和方法

在我们所有乐器(Instrument)例子中,基础类Instrument内的方法都肯定是"伪"方法.若去调用这些方法,就会出现错误.那是由于Instrument的意图是为从它衍生出去的所有类都创建一个通用接口. 之所以要建立这个通用接口,唯一的原因就是它能为不同的子类型作出不同的表示.它为我们建立了一种基本形式,使我们能定义在所有衍生类里"通用"的一些东西.为阐述这个观念,另一个方法是把Instrument称为"抽象基础类"(简称"抽象

JavaScript中Math对象方法使用概述

 JavaScript中Math对象方法如向上取整,有小数就整数部分加1,四舍五入.向下取整等等,下面为大家详细介绍下 1.丢弃小数部分,保留整数部分 parseInt(5/2)   2.向上取整,有小数就整数部分加1   Math.ceil(5/2)   3,四舍五入.   Math.round(5/2)   4,向下取整   Math.floor(5/2)   Math 对象的方法 FF: Firefox, N: Netscape, IE: Internet Explorer   方法 描述