Verwendung der Funktion fma aus math.h



  • Rammsteiner schrieb:

    Jetz nur eine frage, wieso kommen immer nur runde sachen raus, auch wenn ich ihn mit dezimalzahlen fütter?

    Ich nehme an, weil double gar nicht so viele genaue Stellen hat, wie c^2 brauchen würde, um mit genauen Stellen von vorne bis zum Komma zu kommen.



  • Rammsteiner schrieb:

    Jetz nur eine frage, wieso kommen immer nur runde sachen raus, auch wenn ich ihn mit dezimalzahlen fütter?

    Weil c sehr groß ist und c2 noch größer

    Du solltest mal eine Zahl mit 176 Nachkommastellen eingeben oder sowas wie 1E-18



  • danke, für die Hilfe 🙂 ... yeah .. 🙂



  • volkard schrieb:

    Wutz schrieb:

    fma ist nur C99, hat der Webseitenautor natürlich nicht mit dazu geschrieben.

    Doch, hat er.

    Die Tabelle ist schon deshalb wertlos, da schon die 3 am Beginn als C99 gekennzeichneten Funktionen eben nicht C99 sind sondern C89.
    Dass diese Funktionen dann nochmal weiter unten in Tabelle auftauchen, hier aber ohne C99 Kennzeichnung, bestätigt nur nochmal die Wertigkeit dieser Quelle inkl. ihrer C99-Aussagen: Schrott.



  • volkard schrieb:

    Ich nehme an, weil double gar nicht so viele genaue Stellen hat, wie c^2 brauchen würde, um mit genauen Stellen von vorne bis zum Komma zu kommen.

    Das mit den Stellen könnte gerade so passen, aber das hat damit nichts zu tun.

    Wenn du 2E100 * zahl rechnest, musst du für zahl einen Wert eingeben der 101 Nachkommastellen hat, damit ein Wert rauskommt der eine Nachkommstelle hat.

    Bisschen viel wenn mann keine Exponetial-Schreibweise nimmt.



  • DirkB schrieb:

    volkard schrieb:

    Ich nehme an, weil double gar nicht so viele genaue Stellen hat, wie c^2 brauchen würde, um mit genauen Stellen von vorne bis zum Komma zu kommen.

    Das mit den Stellen könnte gerade so passen, aber das hat damit nichts zu tun.

    Wenn du 2E100 * zahl rechnest, musst du für zahl einen Wert eingeben der 101 Nachkommastellen hat, damit ein Wert rauskommt der eine Nachkommstelle hat.

    Bisschen viel wenn mann keine Exponetial-Schreibweise nimmt.

    `

    #include <stdio.h>

    #include <math.h>

    #define c 1234567890.1234567890

    int main(void)

    {

    printf("%f", c*c*c*c*c);
    
    return 0;
    

    }

    `

    Ausgabe:

    2867971861733703688824835068350415579528560640.000000
    

    Gut wäre
    2867971861733704037670417677769204296669543334.959333



  • Da übersteigt ja schon das #define c ... die üblichen 15 signifikanten Stellen von einem double.

    Mit printf("%f", c*c*c*c*c*1E-40); hast du auch wieder Nachkommastellen.



  • DirkB schrieb:

    Da übersteigt ja schon das #define c ... die üblichen 15 signifikanten Stellen von einem double.

    Mit printf("%f", c*c*c*c*c*1E-40); hast du auch wieder Nachkommastellen.

    Also hatte ich doch recht und Dein "aber das hat damit nichts zu tun" war unpassend.



  • volkard schrieb:

    Also hatte ich doch recht und Dein "aber das hat damit nichts zu tun" war unpassend.

    Nein. Zumindest nicht bei dem Beispiel mit c2
    Dort ist die Ungenauigkeit noch nicht so hoch, dass dein Beispiel da greift.

    c2 ist 89875517873681764 = 8,9875517873681764e+16

    Solange bei E = m*c2 die Masse mit weniger als 16 Nachkommastellen angegeben wird, ist E ganzzahlig.
    Nur soviel Nachkommsatellen hatte Rammsteiner davor nicht angegeben.



  • DirkB schrieb:

    Nur soviel Nachkommsatellen hatte Rammsteiner davor nicht angegeben.

    Rammsteiner schrieb:

    Jetz nur eine frage, wieso kommen immer nur runde sachen raus, auch wenn ich ihn mit dezimalzahlen fütter?

    Ich weiß nicht, wieviele er eingegeben hat.

    Erklär mir mal die Ausgabe von
    `

    #include <stdio.h>

    #include <math.h>

    #define c 299792458

    int main(void)

    {

    printf("%f\n", M_PI*c*c);
    
    printf("%f\n", M_PI*c*c+10);
    
    return 0;
    

    }

    `



  • ich hab nur kleine dezimalzahlen wie 3.5 genommen usw ... aber ich denke die mainmessage vom prof is angekommen das pow(x,y) = x^y ist ... danke euch allen für die Hilfe 🙂 ...

    ich vermute mal stark das die konstante für c von mir falsch rausgeucht wurde. was ja nicht weiter schlimm ist, es geht ja einfach um die allgemeine funktion ...

    Eine allgemeine Frage hätte ich da noch, nutzen moderne Spieleschmieden eigentlich noch C oder sind die alle mit C++ unterwegs? Ich frag mich ehrlich gesagt bis heute wieso man in einem Igenieurstudium eine so alte Sprache erlernen muss ... ok ich geb zu man sollte immer wissen womit alles anfing und was hinter gewissen sachen steckt, aber wieso man solch eine Sprache über 2 Semester lernen muss, ist für mich irgendwie sinnfrei. Für mich handelt es sich bei meinen Programmiervorlesungen nur um einen Filter, der dafür sorgen soll, das nicht jeder Ingenieur wird. Ich glaub im weiteren Igenieursleben bringt es keinem etwas, dass ich eine Pyramide aus 2 geschachtelten for-Schleifen und einem Symbol aus der ASCII-Tabelle bauen kann. Das sind Dinge die ich meinem Prof gerne mal sagen würde, aber dass lass ich lieber 😃 ...

    genauso gut kann ich sagen, dass eine Siemens S7 Programmierungsvorlesung mehr Sinn machen würde, das einzig gute aus den C Vorlesungen waren die logischen Verknüpfungen, aber selbst die findet man in jeder spreicherporgammierbaren Steuerung.

    Werde mich wohl in den nächsten Tagen öfter noch an euch wenden, jenachdem wie verständlich meine aktuelle C-Bettlektüre geschrieben ist.



  • So, eine Nacht drüber geschlafen:
    Entschuldigung volkard, ich schließe mich deiner Meinung an.


Anmelden zum Antworten