📄 float.java
字号:
public class Float
{
public static final long VALUE_ONE = 1000;
public static final long PI = 3142;
private static final long SIN_TABLE[] =
{
0, 173, 342, 500, 643, 766, 866, 940, 985, 1000
};
private static final long COS_TABLE[] =
{
1000, 985, 940, 866, 766, 643, 500, 342, 173, 0
};
private Float() {}
public static long createFloat(long integer)
{
if (integer > Long.MAX_VALUE / Float.VALUE_ONE)
throw new RuntimeException("Integer too large.");
return integer * Float.VALUE_ONE;
}
public static long createFloat(long integer, long fraction)
{
if (integer > Long.MAX_VALUE / Float.VALUE_ONE)
throw new RuntimeException("Integer too large.");
if (fraction > Float.VALUE_ONE - 1)
throw new RuntimeException("Fraction too large.");
return integer * Float.VALUE_ONE + fraction;
}
public static long getInteger(long value)
{
return value / Float.VALUE_ONE;
}
public static long getFraction(long value)
{
return value % Float.VALUE_ONE;
}
public static long add(long value1, long value2)
{
return value1 + value2;
}
public static long sub(long value1, long value2)
{
return value1 - value2;
}
public static long mul(long value1, long value2)
{
return value1 * value2 / Float.VALUE_ONE;
}
public static long div(long value1, long value2)
{
return value1 * Float.VALUE_ONE / value2;
}
public static long inv(long value)
{
return Float.div(Float.VALUE_ONE, value);
}
public static long abs(long value)
{
if (value < 0)
value = - value;
return value;
}
public static long sign(long value)
{
return (value < 0 ? -1 : 1);
}
public static long sin(long value)
{
value = value % Float.createFloat(360);
long sign = 1;
if (value > Float.createFloat(180))
{
value = value - Float.createFloat(360);
sign = -1;
}
long abs = Float.abs(value);
if (abs > Float.createFloat(90))
abs = Float.createFloat(180) - abs;
if (abs == Float.createFloat(90))
return Float.createFloat(1);
if (abs == Float.createFloat(0))
return Float.createFloat(0);
int x1 = (int)Float.getInteger(Float.div(abs, Float.createFloat(10)));
int x2 = x1 + 1;
long y1 = SIN_TABLE[x1];
long y2 = SIN_TABLE[x2];
long k = Float.div(Float.sub(y2, y1), Float.sub(x2, x1));
return sign * Float.add(y1, Float.mul(k, Float.sub(abs, x1)));
}
public static long cos(long value)
{
value = value % Float.createFloat(360);
long sign = -1;
if (value > Float.createFloat(180))
{
value = value - Float.createFloat(360);
}
if (value >= Float.createFloat(-90) &&
value <= Float.createFloat(90))
sign = 1;
long abs = Float.abs(value);
if (abs > Float.createFloat(90))
abs = Float.createFloat(180) - abs;
if (abs == Float.createFloat(90))
return Float.createFloat(0);
if (abs == Float.createFloat(0))
return Float.createFloat(1);
int x1 = (int)Float.getInteger(Float.div(abs, Float.createFloat(10)));
int x2 = x1 + 1;
long y1 = COS_TABLE[x1];
long y2 = COS_TABLE[x2];
long k = Float.div(Float.sub(y2, y1), Float.sub(x2, x1));
return sign * Float.add(y1, Float.mul(k, Float.sub(abs, x1)));
}
public static long tan(long value)
{
return Float.div(Float.sin(value), Float.cos(value));
}
public static long toDeg(long value)
{
return Float.div(Float.mul(value, Float.createFloat(180)), Float.PI);
}
public static long toRad(long value)
{
return Float.div(Float.mul(value, Float.PI), Float.createFloat(180));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -