Also, es geht um Temperaturwerte von 0.0 Grad bis 40.0 Grad… Diese sind in einem ‚float‘ vorhanden und sollen in einem Byte (0-255) gespeichert werden. Code:
public static int packFromFloat(float t) {
return Math.round(t * 6.375f);
}
public static float unpackToFloat(int a) {
return Math.round(a / 0.6375f) / 10.0f;
}
public static void main(String[] args) {
int tr = 0;
for (int i = -2; i <= 502; i++) {
char a = (char) (packFromFloat(i / 10f) & 0xFF); // unsigned byte
float b = unpackToFloat(a);
System.out.println(i / 10f + " -> " + (int) a + " -> " + b + " -> " + (i / 10f == b));
if (i / 10f == b)
tr++;
}
System.out.println(tr);
}
Wie leicht zu erkennen, wechseln sich ‚true‘ und ‚false‘ fast regelmäßig ab.
Nu will ich aber, dass die Abbildung um 22.0 Grad herum genauer ist als an den Rändern. Sprich, häufigere Temperaturwerte mit einer höheren Genauigkeit gespeichert werden als andere.
Was muss ich tun?