fix16.java

来自「一个J2ME的3D 一个J2ME的3D 一个J2ME的3D」· Java 代码 · 共 320 行

JAVA
320
字号
/**
 * 
 */
package Math;

/**
 * @author PanXu
 * 定点数
 */
public class FIX16 {

	/**
	 * 
	 */
	public static final int FIX16_SHIFT = 16 ;
	public static final int FIX16_MAG = 65536 ;
	public static final int FIX16_FMASK = 0x0000ffff;
	public static final int FIX16_IMASK = 0xffff0000;
	public static final int FIX16_RUNG_UP = 0x00008000;
	
	public int Data ;
	public static long Temp ;
	
	public FIX16() {
		super();
		// TODO 自动生成构造函数存根
	}
	public FIX16(int n) {
		super();
		// TODO 自动生成构造函数存根
		this .Data = n << this .FIX16_SHIFT;
	}
	public FIX16(float n) {
		super();
		// TODO 自动生成构造函数存根
		this .Data = (int) (n * this .FIX16_MAG);
	}
	/*
	 * 转换
	 */
	public void INT_TO_FIX16 (int n){
		this .Data = n << this .FIX16_SHIFT;
	}
	public void FLOAT_TO_FIX16 (float n){
		this .Data = (int) (n * this .FIX16_MAG);
	}
	public int FIX16_TO_INT (){
		return (this .Data & this .FIX16_IMASK) >> this .FIX16_SHIFT;
	}
	public float FIX16_TO_FLOAT (){
		return ((float)this .Data / 65536.0f);
	}
	/*
	 * 运算
	 */
	//加法
	public FIX16 FIX16_ADD(FIX16 a , FIX16 b){
		FIX16 res = null ;
		res .Data = a .Data + b.Data;
		return res ;
	}
	public FIX16 FIX16_ADD_FORA (FIX16 a , FIX16 b){
		a.Data += b.Data;
		return a ;
	}
	
	//减法
	public FIX16 FIX16_SUB(FIX16 a , FIX16 b){
		FIX16 res = null ;
		res .Data = a .Data - b.Data;
		return res ;
	}
	public FIX16 FIX16_SUB_FORA (FIX16 a , FIX16 b){
		a.Data -= b.Data;
		return a ;
	}
	
	//乘法
	public FIX16 FIX16_MUL(FIX16 a , FIX16 b){
		FIX16 res = null;
		res .Data = (a.Data << 8) * (b.Data << 8);
		return res ;
	}
	public FIX16 FIX16_MUL_FORA(FIX16 a , FIX16 b){
		a.Data = (a.Data << 8) * (b.Data << 8);
		return a ;
	}
	/**
	 * 不同精度的乘法运算(数字表示定点数的位数)
	 * 结果返回给调用的对象
	 */
	/**
	 * 小数
	 */
	public int mulfix_16 (FIX16 a)
	{
		return this .Data * a .Data >> 16;
	}
	/**
	 * 1 - 2 
	 */
	public int mulfix_17 (FIX16 a)
	{
		return ((a.Data >> 1) * (this .Data >> 1)) >> 14;
	}
	/**
	 * 3 - 4 
	 */
	public int mulfix_18 (FIX16 a)
	{
		return ((a.Data >> 2) * (this.Data >> 2)) >> 12;
	}
	/**
	 * 5 - 8 
	 */
	public int mulfix_19 (FIX16 a)
	{
		return ((a.Data >> 3) * (this.Data >> 3)) >> 10;
	}
	/**
	 * 9 - 16 
	 */
	public int mulfix_20 (FIX16 a)
	{
		return ((a.Data >> 4) * (this.Data >> 4)) >> 8;
	}
	/**
	 *171 - 32
	 */
	public int mulfix_21 (FIX16 a)
	{
		return ((a.Data >> 5) * (this.Data >> 5)) >> 6;
	}
	/**
	 * 33 - 64 
	 */
	public int mulfix_22 (FIX16 a)
	{
		return ((a.Data >> 6) * (this.Data >> 6)) >> 4;
	}
	/**
	 * 65 - 128 
	 */
	public int mulfix_23 (FIX16 a)
	{
		return ((a.Data >> 7) * (this.Data >> 7)) >> 2;
	}
	/**
	 * 129 - 256 
	 */
	public int mulfix_24 (FIX16 a)
	{
		return (a.Data >> 8) * (this.Data >> 8);
	}
	/**
	 * 257 - 512 
	 */
	public int mulfix_25 (FIX16 a)
	{
		this .Temp = (a.Data * this .Data) ;
		return (int) (this .Temp >> 16) ;
	}
	/**
	 * 513 - 1024 
	 */
	public int mulfix_26 (FIX16 a)
	{
		this .Temp = (a.Data * this .Data) ;
		return (int) (this .Temp >> 16) ;
	}
	/**
	 * 1025 - 2048 
	 */
	public int mulfix_27 (FIX16 a)
	{
		this .Temp = (a.Data * this .Data) ;
		return (int) (this .Temp >> 16) ;
	}
	/**
	 * 2059 - 4096 
	 */
	public int mulfix_28 (FIX16 a)
	{
		this .Temp = (a.Data * this .Data) ;
		return (int) (this .Temp >> 16) ;
	}
	/**
	 * 4097 -  max
	 */
	public int mulfix_29 (FIX16 a)
	{
		this .Temp = (a.Data * this .Data) ;
		return (int) (this .Temp >> 16) ;
	}
	public int mulfix_30 (FIX16 a)
	{
		this .Temp = (a.Data * this .Data) ;
		return (int) (this .Temp >> 16) ;
	}
	public int mulfix_31 (FIX16 a)
	{
		this .Temp = (a.Data * this .Data) ;
		return (int) (this .Temp >> 16) ;
	}
	public int mulfix_32 (FIX16 a)
	{
		this .Temp = (a.Data * this .Data) ;
		return (int) (this .Temp >> 16) ;
	}
	
	//除法
	public FIX16 FIX16_DIV (FIX16 a , FIX16 b){
		FIX16 res = null;
		res.Data = (a.Data << this.FIX16_SHIFT) / b.Data;
		return res ;
	}
	public FIX16 FIX16_DIV_FORA (FIX16 a , FIX16 b)	{
		a.Data = (a.Data << this.FIX16_SHIFT) / b.Data;
		return a ;
	}
	/**
	 * 不同精度的乘法运算(数字表示定点数的位数)
	 * 结果返回给调用的对象
	 */
	/**
	 * 
	 */
	public int divfix_16 (FIX16 a)
	{
		return (this .Data << 16) / a .Data ;
	}
	
	public int divfix_17 (FIX16 a)
	{
		return (this .Data << 15) / (a .Data >> 1) ;
	}
	
	public int divfix_18 (FIX16 a)
	{
		return (this .Data << 14) / (a .Data >> 2) ;
	}
	
	public int divfix_19 (FIX16 a)
	{
		return (this .Data << 13) / (a .Data >> 3) ;
	}
	
	public int divfix_20 (FIX16 a)
	{
		return (this .Data << 12) / (a .Data >> 4) ;
	}
	
	public int divfix_21 (FIX16 a)
	{
		return (this .Data << 11) / (a .Data >> 5) ;
	}
	
	public int divfix_22 (FIX16 a)
	{
		return (this .Data << 10) / (a .Data >> 6) ;
	}
	
	public int divfix_23 (FIX16 a)
	{
		return (this .Data << 9) / (a .Data >> 7) ;
	}
	
	public int divfix_24 (FIX16 a)
	{
		return (this .Data << 8) / (a .Data >> 8) ;
	}
	
	public int divfix_25 (FIX16 a)
	{
		Temp = (this .Data << 16);
		return (int) (Temp / a.Data) ;
	}
	
	public int divfix_26 (FIX16 a)
	{
		Temp = (this .Data << 16);
		return (int) (Temp / a.Data) ;
	}
	public int divfix_27 (FIX16 a)
	{
		Temp = (this .Data << 16);
		return (int) (Temp / a.Data) ;
	}
	
	public int divfix_28 (FIX16 a)
	{
		Temp = (this .Data << 16);
		return (int) (Temp / a.Data) ;
	}
	
	public int divfix_29 (FIX16 a)
	{
		Temp = (this .Data << 16);
		return (int) (Temp / a.Data) ;
	}
	
	public int divfix_30 (FIX16 a)
	{
		Temp = (this .Data << 16);
		return (int) (Temp / a.Data) ;
	}
	
	public int divfix_31 (FIX16 a)
	{
		Temp = (this .Data << 16);
		return (int) (Temp / a.Data) ;
	}
	
	public int divfix_32 (FIX16 a)
	{
		Temp = (this .Data << 16);
		return (int) (Temp / a.Data) ;
	}
}	

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?