fix dimension encode/decode error

This commit is contained in:
REAndroid 2023-05-03 14:06:43 +02:00
parent 1037986e95
commit db3a18b039

View File

@ -20,9 +20,10 @@ public class ComplexUtil {
public static String decodeComplex(boolean fraction, int complex_value){ public static String decodeComplex(boolean fraction, int complex_value){
int radixFlag = (complex_value >> COMPLEX_RADIX_SHIFT) & COMPLEX_RADIX_MASK; int radixFlag = (complex_value >> COMPLEX_RADIX_SHIFT) & COMPLEX_RADIX_MASK;
Radix radix = Radix.forFlag(radixFlag); Radix radix = Radix.forFlag(radixFlag);
int mantissa = (complex_value >> COMPLEX_MANTISSA_SHIFT) & COMPLEX_MANTISSA_MASK;
mantissa = mantissa << radix.getShift(); int mantissa = (complex_value & ( COMPLEX_MANTISSA_MASK <<COMPLEX_MANTISSA_SHIFT));
float value = mantissa * MANTISSA_MULTIPLIER; float value = mantissa * radix.getMultiplier();
int unit_type = (complex_value >> COMPLEX_UNIT_SHIFT) & COMPLEX_UNIT_MASK; int unit_type = (complex_value >> COMPLEX_UNIT_SHIFT) & COMPLEX_UNIT_MASK;
Unit unit = Unit.fromFlag(fraction, unit_type); Unit unit = Unit.fromFlag(fraction, unit_type);
return radix.formatFloat(fraction, value) + unit.getSymbol(); return radix.formatFloat(fraction, value) + unit.getSymbol();
@ -132,16 +133,18 @@ public class ComplexUtil {
}; };
} }
public enum Radix{ public enum Radix{
RADIX_23p0(0, 23), RADIX_23p0(0, 23, MANTISSA_MULT),
RADIX_16p7(1, 16), RADIX_16p7(1, 16, 1.0f/(1<<7) * MANTISSA_MULT),
RADIX_8p15(2, 8), RADIX_8p15(2, 8, 1.0f/(1<<15) * MANTISSA_MULT),
RADIX_0p23(3, 0); RADIX_0p23(3, 0, 1.0f/(1<<23) * MANTISSA_MULT);
private final int flag; private final int flag;
private final int shift; private final int shift;
Radix(int flag, int shift) { private final float multiplier;
Radix(int flag, int shift, float multiplier) {
this.flag = flag; this.flag = flag;
this.shift = shift; this.shift = shift;
this.multiplier = multiplier;
} }
public String formatFloat(boolean scale, float value){ public String formatFloat(boolean scale, float value){
if(this.flag == 0){ if(this.flag == 0){
@ -195,12 +198,15 @@ public class ComplexUtil {
public int getShift() { public int getShift() {
return shift; return shift;
} }
public float getMultiplier() {
return multiplier;
}
} }
private static final int COMPLEX_RADIX_SHIFT = 4; private static final int COMPLEX_RADIX_SHIFT = 4;
private static final int COMPLEX_RADIX_MASK = 0x3; private static final int COMPLEX_RADIX_MASK = 0x3;
private static final int COMPLEX_MANTISSA_SHIFT = 8; private static final int COMPLEX_MANTISSA_SHIFT = 8;
private static final int COMPLEX_MANTISSA_MASK = 0xffffff; private static final int COMPLEX_MANTISSA_MASK = 0x00ffffff;
private static final float MANTISSA_MULTIPLIER = (1.0f / (1 << 23)); private static final float MANTISSA_MULT = (1.0f / (1 << 8));
private static final int COMPLEX_UNIT_SHIFT = 0; private static final int COMPLEX_UNIT_SHIFT = 0;
private static final int COMPLEX_UNIT_MASK = 0xf; private static final int COMPLEX_UNIT_MASK = 0xf;
} }