Italia
Foro

Was sind native Funktionen?

 
- Page 1 -



Weil du immer noch nicht verständlich erklärt hast, was nprocs sind.


Hallo Nico,

danke per den Hinweis und den Thread hier - leider kann ich damit aber nichts anfangen da ich nicht wissen kann, was Du nicht verstehst.

Vlt. kannst Du mir unter Beachtung der Documentazione  [...]  sagen, was Dir unklar ist.


Inline-Assembler:
 
11.11.2009  
 



 
- Page 8 -


Zur Funktion if: Braucht man garnicht bei nProcs! Du kannst einfach sagen: a=1=2 z.B. um a auf 0 zu setzen oder return a+b<c - das wird alles sauber aufgelöst.

Ich weiss trotzdem nicht, wie ich schönes ArcTan hinbekomme.
 
30.11.2009  
 




Was die Konstanten angeht, bin ich mir nicht sicher -- ich denke nicht, dass fertige soooo viel schneller sind als wenn man Pi() einfach mit 2, bzw. 0,5 malnimmt.


Z.B. Du berechnest per 640x480 Pixel den R-Anteil einer Farbe - per jedes Pixel *2 oder nicht *2 nehmen... das ist hier die Frage und macht sehrwohl dann unheimlichen Geschwindigkeitsunterschied aus.
 
30.11.2009  
 




Nico
Madysa
Aber die Konstanten sind so speziell, dass es wohl reichen potrebbe, das in un Include zu packen, oder?

Die iF-Funktionen brauchte ich in so etwas:
KompilierenMarkierenSeparieren
v = v + if(r <> 0, a / m * dy / r, 0)
>

Wenn ich da ein Brett vorm Kopfe habe, dann wäre ich dankbar, wenn du es löstest.

Bei arctan weiß die Wikipädie mehr.
1. Arctan x lässt sich beliebig genau annähern. arctan(x) = x - x^3/3 + x^5/5 - x^7/7 + ...
Das gilt allerdings nur, wenn x zwischen -1 und +1 liegt.

2. Es gilt: arctan(x) = 2 * arctan(x / (1 + sqrt(1 + sqr(x))))
Ist abs(x) also größer als 1, dann kann es so auf einen niedrigeren Winkel zurückgeführt werden, der dann wiederum mit der obigen Reihe angenähert werden kann.

Ich versuche mich dran; mal sehen, ob ich schneller fertig bin als du.
 
Nico Madysa
30.11.2009  
 




Nico
Madysa
Nachtrag: Ich habe den Verdacht, dass XPSE mit dem Literal -1.0 Probleme hat.
 
Nico Madysa
30.11.2009  
 




Nico
Madysa
Erster!
KompilierenMarkierenSeparieren
 {$cleq}

{arctan

    nproc narctan

        parameters x!
        Reduktion auf lösbaren Arctan
        var fakt& = 1

        whilenot x!>(0.0 - 1.0) and x!<(1.0)

            mul fakt&,2
            x! = x! / (sqrt(sqr(x!) + 1.0) + 1.0)

        wend

        Arctan
        x! = x! - (x! * sqr(x!)) / 3.0 + (x! * sqr(sqr(x!)) / 5.0) - (x! * sqr(sqr(sqr(x!))) / 7.0) + (x! * sqr(sqr(sqr(sqr(x!)))) / 9.0) - (x! * sqr(sqr(sqr(sqr(sqr(x!))))) / 11.0)
        return x! * float(fakt&)

    endproc

    whileloop -120,120

        SetPixel &loop+200,200 - 30 *  arctan(&loop / 10),$FF
        SetPixel &loop+200,200 - 30 * narctan(&loop / 10),$FF0000

    EndWhile

    waitinput
    end

Drunter noch ein schneller Vergleich von Rolands arctan (rot) mit dem angenäherten (blau).
 
Nico Madysa
30.11.2009  
 



Schaue ich mir liebend gerne heute Abend Zuhause an!

Zum iff: v = v + if(r <> 0, a / m * dy / r, 0)

ist doch v = v + (r<>0)*( a / m * dy / r) ?
 
30.11.2009  
 




Nico
Madysa
... Verflucht du bist gut!

Gut, der Punkt geht an dich. Doch dass mit -1.0 etwas nicht stimmt, meine ich immer noch.

EDIT: Argh, nein, das kann doch nicht gehen! In deiner Variante wird ja trotzdem durch Null geteilt, wenn r! Null ist. Ich wusste doch, dass ich mir bei dem if was gedacht habe.
 
Nico Madysa
30.11.2009  
 




Nico
Madysa
Nachtrag: Es fehlt mir auch noch Float() um Gleitkommazahlen aus einem Bereich zu lesen. Weiß nicht, wie ich die sonst an einen Thread weiterreichen soll.
 
Nico Madysa
30.11.2009  
 



Wollte Dir nur zeigen, dass man (naturalmente) auch mit boolischen Ergebnissen rechnen kann.

-1.0 schaue ich mir an und die float-Funktion reiche ich nach.

PS: In nativen Funktionen hält die Floatvariable nur die Adresse eines 8-Byte Speichers aus dem sich der jeweilige Float zusammensetzt. mov eax,f! mov ebx,[eax] setzt nach ebx also erste 4 byte und mit add eax,4 mov ebx,[eax] kommst an die nächsten 4 Byte - ich baue das aber (naturalmente) direkt ein.
 
30.11.2009  
 




Frank
Abbing
add eax,4
mov ebx,[eax]
Nimm besser:

mov ebx,[eax+4]
 
30.11.2009  
 



In reinem ASM ja, in NProcs nicht unbedingt - also besser nicht denn der Operator würde aufgelöst was letztendlich nicht schneller sein kann als add eax,4
 
30.11.2009  
 




Nico
Madysa
Ach herrje, ASM giebts ja auch noch. Ich behulf mir mit Longs und Allocs, was doch ein bisschen umständlicher ist.
 
Nico Madysa
30.11.2009  
 




Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

39.138 Views

Untitledvor 0 min.
p.specht15.11.2018
Ernst02.07.2016
funkheld11.04.2016
HofK26.01.2016
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie