Hallo zusammen,
ich brauche mal wieder etwas Nachhilfe in Integer-Binär-Mathematik. Eine
Empfehlung passender Literatur wäre mir fast noch lieber als eine
direkte Antwort auf meine Frage:
Ich will eine Tabelle logarithmisch gestufter Werte erzeugen. Um das
Ganze nicht zu einfach machen mit zwei Stützstellen pro Binär-Potenz,
also so:
Um genau zu sein, sollte die Umkehrfunktion eine lineare Folge ergeben,
also
so:
(Formeln siehe Bildanhang, falls hier nicht korrekt dargestellt).
Dabei ist die Folge des 2er-Logarithmus für mich der springende Punkt:
Ich will eine Folge von Integer-Ziffern haben, deren Logarithmus die
entsprechdene Folge 0 ... n erzeugt.
Den Logarithmus zu sqrt(2) kann ich ja relativ einfach berechnen:
1 | int f = 123456;
|
2 | f*=f;
|
3 | uint_fast8_t log = 0;
|
4 | while(f) {
|
5 | log++;
|
6 | f>>=1;
|
7 | }
|
An der "Umkehrfunktion" in Integer knobel ich jetzt eine Weile. Für
gerade Indizes ist das einfach. Es sind die Werte 1<<i/2. Für ungerade
Indizes fällt das auf die Frage zurück: Bei welchem Integer macht die
Anzahl der Binärstellen seines Quadrates einen Sprung, also wann gilt:
log2(x*x) > log2((x-1)*(x-1)) ?
Viele Grüße
W.T.