📄 fix16.java
字号:
/**
*
*/
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -