ZFX
ZFX Neu
Home
Community
Neueste Posts
Chat
FAQ
IOTW
Tutorials
Bücher
zfxCON
ZFXCE
Mathlib
ASSIMP
NES
Wir über uns
Impressum
Regeln
Suchen
Mitgliederliste
Membername:
Passwort:
Besucher:
4420511
Jetzt (Chat):
30 (0)
Mitglieder:
5239
Themen:
24223
Nachrichten:
234554
Neuestes Mitglied:
-insane-

ZFX
Coding-Foren
Algorithmen und Datenstrukturen
Komplette MatheBibliothek
GepinntSeite: < 1 2 3 4 5 6 . . . b 17 18 19 20 21 >
AutorThema
Florianx Offline
ZFX'ler


Registriert seit:
27.02.2002

Bayern
Re: Komplette MatheBibliothekNach oben.
Wie schon weiter oben gesagt kann ich dir helfen. Schick mir einfach deinen bisherigen Code, dann schreib ich ihn für die Lib um.
11.07.2004, 15:35:08 Uhr
Bastian Offline
ZFX'ler


Registriert seit:
26.05.2002

Deutschland
Re: Komplette MatheBibliothekNach oben.
wie sieht denn der momentane Status aus?
bin sehr gespennt auf die lib, würde sie gerne nutzen

PS würde auch gerne helfen, bin allerdings nicht so bewandert wie einige andere hier in diesem Themen Komplex...
17.07.2004, 20:27:29 Uhr
Schwedenphysiker
Richard Schubert Offline
DX-Berater


Registriert seit:
05.12.2002

Berlin
85557876 rs@directx9.de
Re: Komplette MatheBibliothekNach oben.

jo, jetzt kanns eigentlich losgehen.
vielleicht sollten wir nochmal cvs-technisch beraten wie das abgehen soll. dann könnten wir endlich mal anfangen.
komplette zusammenfassung der programming guidelines kommt dann auch demnächst.
17.07.2004, 21:07:54 Uhr
DirectX 10
random task Offline
ZFX'ler


Registriert seit:
10.12.2002

Hessen
Re: Komplette MatheBibliothekNach oben.
Leider nicht ISO-konform:
Code:
template
    class TVector3D
    {
    public:

        union
        {
            T val[3]; //< Komponente vom Template-Type T als Array
            struct
            {
                T x; //< x-Komponente vom Template-Type T
                T y; //< x-Komponente vom Template-Type T
                T z; //< x-Komponente vom Template-Type T
            };
        };

...


Namenlose structs sind im aktuellen Standard nicht erlaubt, bzw. ein standardkonformer Compiler darf den Zugriff auf TVector3D.x nicht erlauben.
MSVC übersetzt es zwar ohne Warnungen, bei ausgeschalteten Spracherweiterungen bekommt man jedoch einen Fehler.

Wenn jemand dafür irgendeine Lösung hat, wär ich sehr dankbar, ich verwende im Moment in meinen Mathe-Routinen dieselbe Struktur.
20.07.2004, 17:44:30 Uhr
Florianx Offline
ZFX'ler


Registriert seit:
27.02.2002

Bayern
Re: Komplette MatheBibliothekNach oben.
@random task:
interessant, wo steht denn das?
Ich habs mit VC++ .Net und DevC++ ohne Fehler/Warnungen kompilieren können.
Welcher Kompiler merkert denn?
20.07.2004, 18:47:13 Uhr
Richard Schubert Offline
DX-Berater


Registriert seit:
05.12.2002

Berlin
85557876 rs@directx9.de
Re: Komplette MatheBibliothekNach oben.

So Leuts,

jetzt sollte es langsam aber sicher losgehen, sonst wird es nie fertig.
Ich Schlage vor wir zielen den Oktober an als Betastadium, d.h. es ist fast alles drin,
es muss ab dann nur noch ausgiebig getestet und auf feedback gewartetet werden um evtl.
neue features/neue funktionen hinzuzufügen.
Bei der verwendung der lib fällt sicherlich auf was noch fehlt.

CVS mäßig sollten die ZFXCE-Leute mal was sagen, es kann aber vorerst auch ohne losgehen,
solange die aufgaben gut verteilt sind.

Verbesserungsvorschläge/Ideen immer gleich posten, danke.




>>> Code Guidelines:

Indentation: Tabs (Tabstop = 4)
Dokumentation in deutsch nach Doxygen Richtlinien

Code:
/// \file
///
/// @brief TVector3D
///
/// TVector3D: 3-dimensionaler Vector

#ifndef _ZFXMATH_INCLUDE_VECTOR3D_H_
#define _ZFXMATH_INCLUDE_VECTOR3D_H_

namespace ZFXMath
{
    /// @brief 3-dimensionaler Vector
    ///
    /// 3-dimensionaler Vector mit den Komponenten x, y und z als Template-Type T.
    template
    class TVector3D
    {
    public:

        union
        {
            T val[3];
            struct
            {
                T x;
                T y;
                T z;
            };
            struct
            {
                T r;
                T g;
                T b;
            };
        };

        /// @brief Konstruktor
        ///
        /// Standard-Konstruktor ohne Parameter 
        TVector3D();

        /// @brief Konstruktor
        ///
        /// Konstruktor mit den Komponenten x, y und z als Parameter 
        TVector3D( const T& x, const T& y, const T& z );

        /// @brief Normalisiert den Vector
        ///
        /// Vector wird normalisiert
        /// d.h. er wird auf die Länge 1 skaliert
        Normalize();
    };
}

#endif //_ZFXMATH_INCLUDE_VECTOR3D_H_


>>> Tasks:


  • Wichtige Konstanten (PI, 2PI, ein MaxValue und ein Epsilon, etc. )
  • TMatrix4x4
  • TMultiplyStack
  • TVector2D // union(uv)
  • TVector3D // color enthalten union(rgb)
  • TVector4D // color enthalten union(rgba) und ToDWORD oder so ähnlich
  • Util-Funktionen
  • TPoint3D
  • SHUtils
  • TPlane - TFrustum - TSphere - TAABB - TOOBB - TRay - TPolygon
  • TQuarternion
  • Mini-Utils (min, max, clamp, sin, ..., sqrt, log, ..., round, ... noise, etc.)



>>> Task Allocation:

TheLord: TMatrix4x4, TVector2D, TVector3D, TVector4D
Florianx: Util-Funktionen
Richard: TPoint3D, SH-Utils



1 Mal gendert, zuletzt am 20.07.2004, 21:10:30 Uhr von Richard Schubert.
20.07.2004, 21:09:09 Uhr
DirectX 10
Patrick Offline
ZFX'ler


Registriert seit:
25.02.2002

Deutschland
143040199
Re: Komplette MatheBibliothekNach oben.
Hi,

ich möchte auch etwas meinen Beitrag leisten (auch wenns nicht viel ist), ich hoff es bringt was

Würde in die Kategorie "Mini-Utils" passen:
Code:
#ifdef max
#undef max
#endif

#ifdef min
#undef min
#endif

        // Gibt größte Zahl von 'a' und 'b' zurück
    template <class T> __forceinline const T max (const T& a, const T& b)
    {
        return (a > b ? a : b); 
    }

        // Gibt kleinste Zahl von 'a' und 'b' zurück
    template <class T> __forceinline const T min (const T& a, const T& b)
    {
        return (a < b ? a : b); 
    }

        // Testet ob 'value' in einem Toleranzbereich von 'min' und 'max' ist.
    template <class T> __forceinline const bool tolerance (const T& value, const T& min, const T& max)
    {
        return ((value >= min) && (value <= max));
    }

        // Wandelt Radiat in Grad um
    template <class T> __forceinline const T rad2deg (const T& rad)
    {
        return (rad * 57.295779513082320876846364344191f); 
    }

        // Wandelt Grad in Radiat um
    template <class T> __forceinline const T deg2rad (const T& rad)
    {
        return (rad * 0.017453292519943295769222222222222f); 
    }

        // Gibt das vorzeichen zurück.
        // z.B.    signum(-1123123) = -1
        //        signum(0)         =  0
        //        signum(23902395) = +1
    template <class T> __forceinline const T signum (const T& value)
    {
        if (value == 0) 
            return 0; 
        return (value > 0 ? 1 : -1);
    }

        // Testet ob die Zahl gerade oder Ungerade ist
    template <class T> __forceinline const bool isEven (const T& value)
    {
        return (!(value&1));
    }

        // leichter cast um Zahlen in Strings und umgekehrt zu casten
    template __forceinline const A lexical_cast(const T& source) 
    {
        std::stringstream s;
        s << source;

        A destination;
        s >> destination;

        return (destination);
    }


// [...]


        // wurzelfunktion auf ISSE Basis
    float ISSE_sqrtf(float value)
    {
        __asm
        {
            sqrtss    xmm0, value 
            movss    value, xmm0
        }

        return (value);
    }

        // Sinusfunktion auf FPU Basis
    float FPU_sinf (float value) 
    { 
        __asm 
        { 
            finit 
            fld value 
    
            fsin 
            fst value 
        } 
    
        return (value); 
    }

        // Cosinusfunktion auf FPU Basis
    float FPU_cosf (float value) 
    { 
        __asm 
        { 
            finit 
            fld value 

            fcos 
            fst value 
        } 
    
        return (value); 
    }


-Patrick
20.07.2004, 21:21:58 Uhr
GermanGameDev
Richard Schubert Offline
DX-Berater


Registriert seit:
05.12.2002

Berlin
85557876 rs@directx9.de
Re: Komplette MatheBibliothekNach oben.

jo, nicht schlecht, nur die macros können wir uns hoffentlich sparen. ansonsten noch alles in den namespace rein, die "optimierten" sachen noch hinter spezielisierten templates verstecken um nicht unterschiedliche namen verwenden zu müssen, dann wäre das eine gute ergänzung.

jetz wo ich die tolerance funktion sehe, könnte auch eine nearto funktion nicht schaden, die zurückgibt ob ein wert mit dem abstand von höchstens epsilon am gegebenen punkt (standard=0) ist.

20.07.2004, 21:50:52 Uhr
DirectX 10
Patrick Offline
ZFX'ler


Registriert seit:
25.02.2002

Deutschland
143040199
Re: Komplette MatheBibliothekNach oben.
Hi,

könnte mal gucken was sich machen lässt, hab auch noch eine Klasse rumfliegen für Matrizen auf Templatebasis, wo man X und Y Spalten haben konnte, hab sie jedoch nie fertig stellen können, da es an der Multiplikation zweier verschiedener Matrizen gescheitert ist! Wenn ich sie finde poste ich sie mal

Richard Schubert
Zitat:
Wichtige Konstanten (PI, 2PI, ein MaxValue und ein Epsilon, etc. )

für sowas wie MaxValue und MinValue gibt es doch aus der STL das hier:
Code:
std::numeric_limits<float>::denorm_min();
        std::numeric_limits<float>::epsilon();
        std::numeric_limits<float>::infinity();
        std::numeric_limits<float>::max();
        std::numeric_limits<float>::min();


und für den Rest:
Code:
namespace ZFXMath
{
    const float PI        = 3.14159265358979323846f;
    const float PI_2    = 6.28318530717958647692f;
    const float PI_SQR    = 9.86960440108935861882f;
}


1 Mal gendert, zuletzt am 20.07.2004, 22:41:01 Uhr von Patrick.
20.07.2004, 22:11:25 Uhr
GermanGameDev
Patrick Offline
ZFX'ler


Registriert seit:
25.02.2002

Deutschland
143040199
Re: Komplette MatheBibliothekNach oben.
Hi,

hab sie noch gefunden (war auf ner alten Diskette)

Wer was damit anfangen kann oder sie erweitern will bitte sehr

Code:
/// \file
///
/// @brief TMatrix
///
/// TMatrix: X:Y Dimensions Matrixstruktur

#ifndef _ZFXMATH_INCLUDE_MATRIX_H_
#define _ZFXMATH_INCLUDE_MATRIX_H_

#include 

namespace ZFXMath
{
    template <int M, int N> class TMatrix
    {
    public:

        TMatrix    (void) 
        {
                // Eine Einheitsmatrix erstellen.
            identity ();
        }
        
        void zero        (void);
        void identity    (void);

        TMatrix const&    operator=    (TMatrix const &other);
        bool                    operator==     (TMatrix const &other);
        bool                    operator!=     (TMatrix const &other);

        TMatrix            operator+    (TMatrix const &other) const;
        TMatrix const&    operator+=    (TMatrix const &other);

        TMatrix            operator-    (void) const;
        TMatrix            operator-    (TMatrix const &other) const;

        TMatrix            operator*    (TMatrix const &other) const;
        TMatrix            operator*    (float value) const;

        TMatrix            transpose    (void) const;
        TMatrix            negate        (void) const;

    public:
        float                matrix[M][N];
    };


    template<int M, int N> inline void TMatrix::zero (void)
    {
            // alles auf 0 setzen
        memset ((*this).matrix, 0, sizeof(float)*M*N);
    }

    template<int M, int N> inline void TMatrix::identity (void)
    {
            // Matrix _muss_ Quadratisch sein
        assert (M == N);

            // alles auf 0 setzen
        memset ((*this).matrix, 0, sizeof(float)*M*N);

            // Hauptdiagonale auf 1 setzen
        for (int i=0; ithis).matrix[i][i] = 1.0f;
        }
    }

    template<int M, int N> inline TMatrix const &TMatrix::operator= (TMatrix const &other)
    {
            // Matrix gleichsetzen
        memcpy ((*this).matrix, other.matrix, sizeof(float)*M*N);

        return (*this);
    }

    template<int M, int N> inline bool TMatrix::operator== (TMatrix const &other)
    {
            // Druchlaufe alle Einträge und teste sie zueinander
        for (int i=0; ifor (int j=0; jif ((*this).matrix[i][j] != other.matrix[i][j])
                    return (false);
            }
        }

        return (true);
    }

    template<int M, int N> inline bool TMatrix::operator!= (TMatrix const &other)
    {
        return (!((*this) == other));
    }

    template<int M, int N> inline TMatrix TMatrix::operator+ (TMatrix const &other) const
    {
        TMatrix ret;
            
            // Druchlaufe alle Einträge und addiere
        for (int i=0; ifor (int j=0; jthis).matrix[i][j] + other.matrix[i][j];
            }
        }

        return (ret);
    }


    template<int M, int N> inline TMatrix const &TMatrix::operator+= (TMatrix const &other)
    {
            // Druchlaufe alle Einträge und addiere
        for (int i=0; ifor (int j=0; jthis).matrix[i][j] += other.matrix[i][j];
            }
        }

        return (*this);
    }


    template<int M, int N> inline TMatrix TMatrix::operator- (void) const
    {
        TMatrix ret;
        
            // Druchlaufe alle Einträge und rechne |*(-1)
        for (int i=0; ifor (int j=0; jthis).matrix[i][j] = -(*this).matrix[i][j];
            }
        }
        
        return (ret);
    }


    template<int M, int N> inline TMatrix TMatrix::operator- (TMatrix const &other) const
    {
        TMatrix ret;

            // Druchlaufe alle Einträge und rechne minus der anderen Matrix
        for (int i=0; ifor (int j=0; jreturn ret;
    }

    template<int M, int N> inline TMatrix TMatrix::operator* (TMatrix const &other) const
    {
        // Hier ist die Klasse gescheitert... leider :(

        return (*this);
    }


    template<int M, int N> inline TMatrix TMatrix::operator* (float value) const
    {
        TMatrix ret;

            // Druchlaufe alle Einträge und rechne mal value
        for (int i=0; ifor (int j=0; jthis).matrix[i][j] * value;
            }
        }

        return (ret);
    }

    template<int M, int N> inline TMatrix TMatrix::transpose(void) const
    {
        TMatrix ret;
        
            // Druchlaufe alle Einträge und vertausche sie
        for (int i=0; ifor (int j=0; jthis).matrix[j][i];
            }
        }
        
        return (ret);
    }

    template<int M, int N> inline TMatrix TMatrix::negate (void) const
    {
        TMatrix ret;
        
            // Druchlaufe alle Einträge und rechne |*(-1)
        for (int i=0; ifor (int j=0; jthis).matrix[i][j] = -(*this).matrix[i][j];
            }
        }
        
        return (ret);
    }

} // namespace

#endif // _ZFXMATH_INCLUDE_MATRIX_H_


ich weis ist viel code, aber er funzt bis auf die multiplikation
20.07.2004, 22:47:09 Uhr
GermanGameDev
Richard Schubert Offline
DX-Berater


Registriert seit:
05.12.2002

Berlin
85557876 rs@directx9.de
Re: Komplette MatheBibliothekNach oben.

die nehmen wir doch gern. die vollendung und die vollständige template-isierung dürfte kein problem darstellen. Danke.
20.07.2004, 22:58:05 Uhr
DirectX 10
Patrick Offline
ZFX'ler


Registriert seit:
25.02.2002

Deutschland
143040199
Re: Komplette MatheBibliothekNach oben.
Dann will ich aber auch die fertige Version haben

Steht sonst noch was großartiges an? bzw. irgendwas wichtiges auf der ToDo list?
20.07.2004, 23:00:54 Uhr
GermanGameDev
Richard Schubert Offline
DX-Berater


Registriert seit:
05.12.2002

Berlin
85557876 rs@directx9.de
Re: Komplette MatheBibliothekNach oben.

jo klar, die ist doch für alle da, wie frosta.

sieht so aus als wären nur noch folgende sachen: zu vergeben:

TPlane - TFrustum - TSphere
TQuarternion

was dann vielleicht noch fehlt ist eine {TQuarternion - TVector3D - TScale}-Klasse mit der man auch einen Stack aufbauen könnte. der also so funktioniert wie eine matrix, nur eben Rotation, Scale und Translation getrennt. man kann diese einfach in eine matrix umwandeln.
so kann man schön speicher sparen und evtl. auch rechenarbeit.
21.07.2004, 09:29:46 Uhr
DirectX 10
random task Offline
ZFX'ler


Registriert seit:
10.12.2002

Hessen
Re: Komplette MatheBibliothekNach oben.
Zitat von Florianx:
@random task:
interessant, wo steht denn das?
Ich habs mit VC++ .Net und DevC++ ohne Fehler/Warnungen kompilieren können.
Welcher Kompiler merkert denn?


Wie schon gesagt, der MSVC wenn man ihn auf standardkonform schaltet, und ich glaube der neueste GCC (ab 3.4 oder so). Ich hab den Code mit nem älteren 3er kompiliert, der begnügt sich noch mit ner Warnung. Daher hab ich auch die Info.

Den Link hab ich noch gefunden:
http://www.redhat.com/docs/manuals/enterprise/RHEL-3-Manual/gcc/unnamed-fields.html

Wie gesagt, dass mit dem GCC weiß ich nicht genau, da ich den neuesten nicht installiert habe. Momentan sieht es zwar so aus, als würden alle Compiler das schlucken, im Standard steht wohl aber was anderes. Eigentlich auch eine Schwachstelle im Standard, würde ich sagen.
21.07.2004, 14:37:31 Uhr
Florianx Offline
ZFX'ler


Registriert seit:
27.02.2002

Bayern
Re: Komplette MatheBibliothekNach oben.
Hi,

Ich bin schon schon dabei, die folgende Sachen zu machen:
TMultiplyStack
Wichtige Konstanten
Util-Funktionen
Mini-Utils

@Patrick
Die meißten Funktionen hatte ich zwar schon, aber trotzdem danke.

Zurzeit bin ich am Testen, ob man mit Hilfe von Compiler-abhänigen Futures & inline-asm bei den Standard-Funktionen noch was raushohlen kann.

Was noch fehlt ist eine Doxygen-Config.
21.07.2004, 15:19:02 Uhr
Richard Schubert Offline
DX-Berater


Registriert seit:
05.12.2002

Berlin
85557876 rs@directx9.de
Re: Komplette MatheBibliothekNach oben.

@Florianx:
hab schon geshen dass du vieles davon schon gemacht hast, könntest du das schonmal als ein grundgerüst zusammensetzen, sodass man nachher einfach nur die zfxmath.h einbinden muss um alle nachher enthaltenen elemente verwenden zu können?!
ich würde nämlich schon gerne einige sachen daraus für meine implementationen verwenden.
22.07.2004, 21:44:48 Uhr
DirectX 10
Florianx Offline
ZFX'ler


Registriert seit:
27.02.2002

Bayern
Re: Komplette MatheBibliothekNach oben.
Hi,
hier sind meine Aktuellen Files:
ZFXMath.h
BasicMath.h
BasicMath.inl
MultiplyStack.h
MultiplyStack.inl
Matrix44Stack.h

Optimierung hab ich rausgenommen, da sie noch nicht funktioniert. Kennt sich einer von euch mit inline-ASM aus?

Wie macht man am besten Perfomance-Tests? Einfach Funktion 1 Millionen mal in einer Schleife aufrufen und Zeit stoppen?
23.07.2004, 14:35:56 Uhr
Patrick Offline
ZFX'ler


Registriert seit:
25.02.2002

Deutschland
143040199
Re: Komplette MatheBibliothekNach oben.
Hi,

frage wieso benutzt du nicht templates für deg2rad sowie sin cos uvm. sondern überlädst diese? Ist doch unnütz bei templates?

edit: so könntest du den code um 3/4 (!!!)verkleinern und so leichter warten, also eine Überlegung wäre es ja wert

Optimierungen: 180/PI und co, kann man ja schon selber Optimieren (verlass dich nicht zu sehr auf den Compiler!)

Code:
template<class T> inline T& ZFXMath::Min(T& t1, T& t2)
{
return ( (t1 < t2) ? t1 : t2 );
}
Gib keine Referenz auf T zurück, das gibt bei einigen Compilern Warnungen. sowie übergib const Referenzen (damit man sieht das nichts verändert wird! const schadet nie) und gib ein einen konstanten wert zurück.

Code:
inline float ZFXMath::Pow2(float t)
{
return t*t;
}

inline double ZFXMath::Pow2(double t)
{
return t*t;
}

ist doch total überflüssig so viele zu haben, wenn man templates benutzt. (genau wie oben const bei parametern benutzen)

Code:
inline float ZFXMath::DegToRad(float deg)
{
return deg * (float)PI / 180.0f;
}

böser cast, der nimmt performance weg. Schreib die zahl wenn schon direkt aus, so fällt der cast weg und man hat etwas speed dazu.

War nur so ne kleine anregung.

Achja, ich müsste noch paar inline assemblerfunktionen rumfliegen haben, ich poste sie wenn ich sie finde! Muss jetzt erstmal einkaufen fahren

1 Mal gendert, zuletzt am 23.07.2004, 15:14:07 Uhr von Patrick.
23.07.2004, 15:10:36 Uhr
GermanGameDev
Richard Schubert Offline
DX-Berater


Registriert seit:
05.12.2002

Berlin
85557876 rs@directx9.de
Re: Komplette MatheBibliothekNach oben.

jau schon wirklich nicht schlecht, die anregungen von patrick klingen ganz gut, wäre auch nicht schlecht wenn du noch patricks funktionen einbauen könntest die noch fehlen, also tolerance, isEven,

Code:
// leichter cast um Zahlen in Strings und umgekehrt zu casten
    template __forceinline const A lexical_cast(const T& source) 
    {
        std::stringstream s;
        s << source;

        A destination;
        s >> destination;

        return (destination);
    }



und vielleicht noch das von mir erwähnte NearTo.
um die MatrixMxN kümmere ich mich, Danke.
23.07.2004, 15:33:54 Uhr
DirectX 10
Patrick Offline
ZFX'ler


Registriert seit:
25.02.2002

Deutschland
143040199
Re: Komplette MatheBibliothekNach oben.
Zitat von Richard Schubert:

jau schon wirklich nicht schlecht, die anregungen von patrick klingen ganz gut, wäre auch nicht schlecht wenn du noch patricks funktionen einbauen könntest die noch fehlen, also tolerance, isEven, ...


Ich mein, wenn schon denn schon Wozu 10 Funktionen in einer neuen Version ändern wenn man nur 1 ändern muss die ein template ist Ist doch überschaubarer, leichter zu warten und schöner

Achja ich guck mal ob ich so ne Quaternion klasse zusammen kriege
23.07.2004, 15:38:09 Uhr
GermanGameDev
Florianx Offline
ZFX'ler


Registriert seit:
27.02.2002

Bayern
Re: Komplette MatheBibliothekNach oben.
Dass mit float, double anstatt Template habe ich wegen der ASM-Optimierung gemacht, man könnte aber auch Spezialisierungen verwenden. Werd ich ändern.

Bei Min/Max war ich nicht sicher, ob ich die Parameter und Rückgabe Konstant machen soll, da man folgendes machen könnte:
Code:
int x,y;
...
Min(x,y) = 0;
...


Wegen den kleinen Optimierungen:
Das ist nicht die aktuellst Version. Allerding muss ich bei der aktuellen noch einige Probleme beseitigen.
ASM-Funktionen hab ich auch schon, allerding sind diese aus unerklärlichen Gründen wesentlich langsamer ans die Std. Vielleicht liegts am Performance-Test.
23.07.2004, 15:39:17 Uhr
Patrick Offline
ZFX'ler


Registriert seit:
25.02.2002

Deutschland
143040199
Re: Komplette MatheBibliothekNach oben.
achja was mir noch aufgefallen ist:
benutz bei den parametern folgendes:
value, value1, value2, ..., degrees, rad, min, max usw. und nicht sowas: f, ld, t, usw.

das macht den code leichter lesbarer

Das mit den ASM Optimirungen, sofern wie ich weis rechnet ISSE und 3DNow! mit float und double gleich, also die handhabung.

Konstate Sachen sind oft besser

Zeig mal deinen Performancetest, vielleicht ist der ja fehlerhaft
23.07.2004, 15:47:58 Uhr
GermanGameDev
Florianx Offline
ZFX'ler


Registriert seit:
27.02.2002

Bayern
Re: Komplette MatheBibliothekNach oben.
Hi, mein Performace-Test sieht so aus:

Code:
LARGE_INTEGER Freg, StartCount, EndCount;
::QueryPerformanceFrequency(&Freg);
::QueryPerformanceCounter(&StartCount);

for(int i=0; i<1000000; i++)
{
    x = ZFXMath::ASin(0.5f);
}

::QueryPerformanceCounter(&EndCount);
double time = ((double)(EndCount.QuadPart - StartCount.QuadPart) / (double)(Freg.QuadPart)) * 1000.0;

cout << \"Time in milisec: \" << time << endl;
23.07.2004, 21:11:36 Uhr
random task Offline
ZFX'ler


Registriert seit:
10.12.2002

Hessen
Re: Komplette MatheBibliothekNach oben.
Zitat von Patrick:

Optimierungen: 180/PI und co, kann man ja schon selber Optimieren (verlass dich nicht zu sehr auf den Compiler!)

...

Code:
inline float ZFXMath::DegToRad(float deg)
{
return deg * (float)PI / 180.0f;
}

böser cast, der nimmt performance weg. Schreib die zahl wenn schon direkt aus, so fällt der cast weg und man hat etwas speed dazu.


Nicht übertreiben, Konstanten werden garantiert nicht zur Laufzeit umgewandelt. Der Compiler macht aus dem Ausdruck auf jeden Fall eine einzige Konstante, dass muss dich überhaupt nicht kümmern. Da du schon mit Lesbarkeit argumentierst, würde ich obigen Code einem deg * 0.017.. auf jeden Fall vorziehen.
24.07.2004, 09:32:34 Uhr
Seraph Offline
Administrator


Registriert seit:
18.04.2002

England
Re: Komplette MatheBibliothekNach oben.
Warum schwirren die Dateien hier so einzeln durch die Gegend? Sagt doch einfach was und ich richte euch ein Repo ein oder füge die fehlenden Personen beim ZFXCE-Repo hinzu.
24.07.2004, 19:13:44 Uhr
ZFX - 3D Entertainment
GepinntSeite: < 1 2 3 4 5 6 . . . b 17 18 19 20 21 >


ZFX Community Software, Version 0.9.1
Copyright 2002-2003 by Steffen Engel