| |
|
|
- Página 1 - |
|
p.specht
| Berühmter bit-hack-Algorithmus de QUAKE III para Invertieren de Quadratwurzeln ... se en Normierung el Longitud de 3D-Vektoren en Single precision float-Variables eingesetzt. In Ensamblador encima drei veces más rápido como 1/Sqrt() !, Fehler 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 ▲ |
|
|
|
|
« Dieser Contribución wurde como Solución gekennzeichnet. » |
|
Michael W. | Nun sí, el debería wir eigentlich nachbilden puede.
Como el (Microsoft-)Floats sí mittels Single() en un Longint gespeichert voluntad puede...
// Inverse Square Root
// Def !threehalfs 1.5 // oder como wirkliche Konstante, entonces como Präfix
Proc Q_rsqrt Parámetros number! Declarar i&, x2!, y! Var threehalfs! = 1.5 // con richtiger Konstante se esta Línea entonces lejos
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!))) Volver y! ENDPROC
Yo habe sólo a a Formel geschaut. Einfach veces testen. |
|
|
| |
|
|
|
|
p.specht
| Mutiger Intento, großes DANKE!
Sieht bien de:
// Inverse Square Root
// Def !threehalfs 1.5 // oder como wirkliche Konstante, entonces como Präfix
Proc Q_rsqrt
Parámetros number!
Declarar i&, x2!, y!
Var threehalfs! = 1.5// con richtiger Konstante se esta Línea entonces lejos
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!)))
Volver y!
ENDPROC
Título de la ventana "Testbench para Michael Wodrichs Quake-Trick"
AppendMenubar 100," Testwert Quake-Output 1/Sqrt() Abs.Fehler Rel.Err %"
cls:Conjunto("decimals",7):Imprimir
Declarar w!
WhileLoop 1,999999,50:w!=&Loop/100//generiert 5000 test steps
Imprimir " ",w!,Q_rsqrt(w!),1/Sqrt(w!),(Q_rsqrt(w!)-1/Sqrt(w!)),(Abs(Q_rsqrt(w!)-1/Sqrt(w!))/(1/Sqrt(w!)))*100,"%"
If %csrlin>27:WaitInput 8000:cls:Imprimir:EndIf
EndWhile
Imprimir:Imprimir "---":Beep
WaitInput
End
|
|
|
| Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 06.01.2021 ▲ |
|
|
|
|
Sven Bader | Desde que gerade con el Generierung de Normalen arbeite, Yo auch veces el Hack hier ausprobiert. Für el gezeigte Ejemplo podría Yo no optischen Diferencia determinar. Ob lo en XProfan tatsächlich más rápido es Todavía no ausprobiert.
Im nächsten Schritt debería Yo de paso todavía el je 4 Normalen, que en el Schnittpunkten treffen zusammenfassen, entonces el Schattierung geglättet.
|
|
|
| |
|
|
|
p.specht
| Hält sicher schön warm con el 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 |
|
|
| |
|
|