| |
|
|
- page 1 - |
|
p.specht
| Berühmter bit-hack-Algorithmus aus QUAKE III zum Invertieren de Quadratwurzeln ... wird chez qui Normierung qui Longueur de 3D-Vektoren dans Single precision float-Variablen eingesetzt. dans Assembler sur trois la fois plus rapide comme 1/Sqrt() !, faute max. 1 %:
Youtube-Link (engl.): [...] |
|
|
| Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 03.01.2021 ▲ |
|
|
|
|
« cette Beitrag wurde comme Solution gekennzeichnet. » |
|
Michael W. | eh bien, den devrait wir eigentlich nachbilden peut.
là qui (Microsoft-)Floats oui mittels Single() dans einem Longint gespeichert volonté peut...
// Inverse Square Racine
// Def !threehalfs 1.5 // ou bien comme wirkliche Konstante, ensuite comme Präfix
Proc Q_rsqrt Paramètres number! Déclarer i&, x2!, y! Var threehalfs! = 1.5 // avec richtiger Konstante wird cet la ligne ensuite entfernt
x2! = number! * 0.5 y! = number!
i& = Single(y!) i& = $5F3759DF - (i& >> 1) y! = Double(i&)
y! = y! * (threehalfs! - (x2! * y! * y!)) // y! * (threehalfs! - (x2! * Sqr(y!))) // y! = y! * (threehalfs! - (x2! * y! * y!)) // y! * (threehalfs! - (x2! * Sqr(y!))) Retour y! ENDPROC
j'ai seulement jusqu'à zur Formel geschaut. simple la fois testen. |
|
|
| |
|
|
|
|
p.specht
| Mutiger Versuch, großes DANKE!
Sieht bien aus:
// Inverse Square Racine
// Def !threehalfs 1.5 // ou bien comme wirkliche Konstante, ensuite comme Präfix
Proc Q_rsqrt
Paramètres number!
Déclarer i&, x2!, y!
Var threehalfs! = 1.5// avec richtiger Konstante wird cet la ligne ensuite entfernt
x2! = number! * 0.5
y! = number!
i& = Single(y!)
i& = $5F3759DF - (i& >> 1)
y! = Double(i&)
y! = y! * (threehalfs! - (x2! * y! * y!))// y! * (threehalfs! - (x2! * Sqr(y!)))
'//y! = y! * (threehalfs! - (x2! * y! * y!)) // y! * (threehalfs! - (x2! * Sqr(y!)))
Retour y!
ENDPROC
Titre de la fenêtre "Testbench pour Michael Wodrichs Quake-Trick"
AppendMenubar 100," Testwert Quake-Output 1/Sqrt() Abs.faute Rel.Err %"
cls:Set("decimals",7):Imprimer
Déclarer w!
WhileLoop 1,999999,50:w!=&Boucle/100//generiert 5000 test steps
Imprimer " ",w!,Q_rsqrt(w!),1/Sqrt(w!),(Q_rsqrt(w!)-1/Sqrt(w!)),(Abs(Q_rsqrt(w!)-1/Sqrt(w!))/(1/Sqrt(w!)))*100,"%"
Si %csrlin>27:WaitInput 8000:cls:Imprimer:EndIf
Endwhile
Imprimer:Imprimer "---":Beep
WaitInput
Fin
|
|
|
| Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 06.01.2021 ▲ |
|
|
|
|
Sven Bader | là je justement avec qui Generierung de Normalen arbeite, habe je aussi la fois den Hack ici ausprobiert. Pour cela gezeigte Beispiel konnte je keinen optischen Unterschied feststellen. si es dans XProfan réellement plus rapide ist habe je encore pas ausprobiert.
Im prochain Schritt devrait je incidemment encore qui je 4 Normalen, qui sich dans den Schnittpunkten rendez-vous zusammenfassen, ensuite ist qui répartition des ombres geglättet.
|
|
|
| |
|
|
|
p.specht
| Hält sûrement joli chaleureux avec den vielen Haaren! |
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 27.09.2021 ▲ |
|
|
|
|
Sven Bader |
|
|
| |
|
|