sin, cos, abs, min, max usw. keine Templates in C++???



  • sinus user schrieb:

    .filmor schrieb:

    sinus user schrieb:

    Mir würd da schon auf anhieb ein Beispiel für logs einfallen wo man schon mal auf die dezimalstellen pfeifen kann.

    In der Tat, der Logarithmus kann auf unsigned(!) int sinnvoll sein. Aber nicht auf allen oder einem großen Anteil der Datentypen. Und deshalb macht man aus ihm kein Template, sondern überlädt.

    gibt es dafür nicht template spezialisierung?

    Nein. Die Template-Spezialisierung ist dafür da, in einigen wenigen Spezialfällen unter vielen allgemeinen etwas angepasst durchzuführen. Mathematische Funktionen funktionieren aber generell nur auf Zahlentypen und bei denen auch meistens nur auf "reellen" Zahlen (denen double und float noch am nächsten kommen). Also hast du eben nicht viele allgemeine Fälle sondern nur 3 (oder 6, wenn du die komplexen Zahlen noch hinzunimmst), nämlich die Fließkommatypen float, double und long double.



  • .filmor schrieb:

    Die trigonometrischen Funktionen machen ausnahmslos alle
    keinen Sinn auf Ganzzahlen.

    machen sie wohl.
    z.b. wenn man keine foating point hardware hat und emulierte floats zu lahm sind.
    --> http://www.allegro.cc/manual/api/fixed-point-math-routines/
    🙂



  • @pale dog: fixkommazahlen sind keine integers. sie werden bloss als integers dargestellt.



  • Lies dir meinen Satz durch. Ich schrieb bewusst Ganzzahlen und |Z und nicht Integer-Typen.



  • hustbaer schrieb:

    @pale dog: fixkommazahlen sind keine integers. sie werden bloss als integers dargestellt.

    weiss ich, der unterschied ist aber verschwindend gering 😉



  • sinus user schrieb:

    Jester schrieb:

    Weil Du sin schreiben sollst und nicht sin<int> es gibt kein Funktionstemplate für sin weil es keinen Sinn machen würde.

    Der Sinn sei mal dahingestellt, aber es fehlt - Stimmts oder stimmts nicht, das es fehlt?

    🙄
    Warum fehlt eine Registrierkasse an Deinem Fahrrad ? Das ist ja total bescheuert - wer hat sich denn so was Blödes und Inkonsistentes wie den Strassenverkehr ausgedacht ?

    Sag nicht, dass sie nicht fehlen würde: Sie ist nicht da, oder ? Also fehlt sie !!!
    Gibs zu !!!
    🤡

    @C++: Man sollte auch sofort open() für ints mitdefinieren ! Warum sollte das nur für streams geben ? Was, wenn jemand mal ein int öffnen möchte ? Und nicht vergessen, dieses blöde Overloading abzuschaffen ! Da sieht man ja gar nicht mehr, welche Funktion nun aufgerufen wird !!!

    Gruß,

    Simon2.



  • hi, vielleicht sollte man einfach mal in math.h nachschauen, für sin(x) gibt s da
    den double sin(double) (kein long double im Standard). Auf float casten is da nix, nein, ist doch Unfug, dieser float cast. wer längere sinuse braucht, schreibt sich den selbst oder nimmt GMP und konsorten.
    vg. tesu
    ps: und der Scott Meyers ist doch auch nur ein träumer
    edit: bei tangens machen ganzzahlen doch bestimmt sinn, oder? Trigonometrische Funktionen und BCD Codierung vertragen sich aber nicht !



  • tesuji schrieb:

    ps: und der Scott Meyers ist doch auch nur ein träumer

    der hat mehr drauf als du es je haben wirst



  • Warum diskutiert ihr alle mit jemandem über die Sinnhaftigkeit von Templates in einer speziellen Funktion, wenn dieser jenige offensichtlich keine Ahnung davon hat, wofür Templates da sind?

    Wieso erklärt ihr ihm nicht lieber, was Templates sind bzw. schickt ihn an eine entsprechende Adresse. Scott Meyers scheint es nicht gut genug erklärt zu haben.



  • Konrad Rudolph schrieb:

    Warum diskutiert ihr alle mit jemandem über die Sinnhaftigkeit von Templates in einer speziellen Funktion, wenn dieser jenige offensichtlich keine Ahnung davon hat, wofür Templates da sind?

    Wieso erklärt ihr ihm nicht lieber, was Templates sind bzw. schickt ihn an eine entsprechende Adresse. Scott Meyers scheint es nicht gut genug erklärt zu haben.

    Manchmal macht es Sinn jemanden auf den richtigen Weg zu führen und manchmal nicht.
    In letzterem Fall macht man sich einfach über ihn lustig, wie hier 🙂



  • Konrad Rudolph schrieb:

    Warum diskutiert ihr alle mit jemandem über die Sinnhaftigkeit von Templates in einer speziellen Funktion, wenn dieser jenige offensichtlich keine Ahnung davon hat, wofür Templates da sind?

    Aus Höflichkeit. Man kann natürlich immer jedem sofort sagen dass er keine Ahnung hat, aber effektiver ist es, wenn er das im Laufe der Diskussion selbst erkennt.



  • lolz schrieb:

    In letzterem Fall macht man sich einfach über ihn lustig, wie hier 🙂

    Bashar schrieb:

    Aus Höflichkeit.

    ROFL. 🙂 Made my day.



  • Konrad Rudolph schrieb:

    ...Wieso erklärt ihr ihm nicht lieber, ...

    Weil es sich offensichtlich um jemanden handelt, der ganz tief aus dem Lernresistenzpool gefischt wurde. Wer offensichtlich wenig Ahnung hat (was nicht schlimm ist) und jeden, der ihm vorsichtig auf den Weg helfen will, übellaunig anranzt (schlimm), hat es nicht besser verdient.

    Bibel; Sprüche 9, 7+9 schrieb:

    " Wer den Spötter belehrt, der trägt Schande davon, und wer den Gottlosen zurechtweist, holt sich Schmach. ... 9 Gib dem Weisen, so wird er noch weiser werden; lehre den Gerechten, so wird er in der Lehre zunehmen. "

    Gruß,

    Simon2.



  • Cooler Thread, hätt nicht gedacht das er 6 Seiten lang wird. int sin(int) cool 🕶

    Das geht dann als Least-Precision-Math-Library in den Standard ein

    Wollen wir so eine Lib schreiben? Man kann auch sagen: Least-Precision-But-Most-Fast-Math-Library oder kurz: LPBMFM-Lib.



  • pale dog schrieb:

    .filmor schrieb:

    Die trigonometrischen Funktionen machen ausnahmslos alle
    keinen Sinn auf Ganzzahlen.

    machen sie wohl.
    z.b. wenn man keine foating point hardware hat und emulierte floats zu lahm sind.
    --> http://www.allegro.cc/manual/api/fixed-point-math-routines/
    🙂

    Sorry, wenn's etwas verspätet ist, aber Fixkommazahlen stehen hier nicht zur Debatte - und wenn doch, nützt ihnen die std::sin() überhaupt nichts (und damit auch nicht das Template von "sinus user").

    tesuji schrieb:

    hi, vielleicht sollte man einfach mal in math.h nachschauen, für sin(x) gibt s da
    den double sin(double) (kein long double im Standard). Auf float casten is da nix, nein, ist doch Unfug, dieser float cast. wer längere sinuse braucht, schreibt sich den selbst oder nimmt GMP und konsorten.

    Was glaubst du, was ich ihm seit Freitag zu erklären versuche 😉



  • sin<std::string>("foo");
    

    *scnr*



  • ich wollte gerade mit sin<bool>(true) ankommen, aber mit Strings ist natürlich nochmal um einiges cooler.



  • ich glaube der threadersteller meint

    float sin(int)



  • vermutung schrieb:

    ich glaube der threadersteller meint

    float sin(int)

    und was soll die besser/anders machen als
    float sin(float)
    ?
    Und rechtfertigt das wirklich die Einführung eines Funktionstemplates mit 3 Spezialisierungen, für die jede andere Instantiierung sinnlos ist ?

    Gruß,

    Simon2.


Anmelden zum Antworten