Suche schiefe Abbildung

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?

Ich denke… ich suche nach einer logarithmischen Skalierung?

Also das sollte mit der umgekehrten Arc Length einer Parabel laufen. Das wär genau die gesuchte Abbildung.

Parabel scheint doch nicht richtig zu sein. Sagen wir, ich hätte eine Parabel
-x*x/100+1
Ableitung
-x/50
Integral
1-x*x/100 dx
Schnittpunkt
10
dann wäre die Arc Length im 1. Quadranten
sqrt(1+(-10/50)^2)*10
10,198…
richtig? (Vergleich Diagonale ca 10,05…)
Allerdings runde ich die Funktionswerte, wodurch sich Rundungsfehler kumulieren… und es zu großen Aweichungen kommt.
Ich bräuchte eine „Heaviside-Funktion“, welche dann allerdings nicht mehr stetig wäre.
So eine Funktion gibt es nicht oder?