zu große zahlen

Tutorials.at
Verfügbare Informationen zu "zu große zahlen"

  • Qualität des Beitrags: 0 Sterne
  • Beteiligte Poster: dani93 - Moritz - Xin - DrPhil_Guth - X
  • Forum: Tutorials.at
  • Forenbeschreibung: Programmierforum
  • aus dem Unterforum: C / C++
  • Antworten: 14
  • Forum gestartet am: Mittwoch 19.04.2006
  • Sprache: deutsch
  • Link zum Originaltopic: zu große zahlen
  • Letzte Antwort: vor 16 Jahren, 4 Monaten, 3 Tagen, 13 Stunden, 22 Minuten
  • Alle Beiträge und Antworten zu "zu große zahlen"

    Re: zu große zahlen

    dani93 - 14.12.2007, 19:59

    zu große zahlen
    Hallo
    Ich übe gerade ein wenig und wollte ein Programm schreiben, das die Herzchläge in einem Menschenleben berechnet. Als Werte werden dafür 1 Schlag pro Sekunde und eine Lebensdauer von 78 Jahren angenommen. Dann kommt natürlich eine riesige Zahl raus, für die nicht mal ein long int reicht. (Folge: sie wird negativ)
    Kann mir jemand sagen wie ich dieses Problem lösen kann?



    Re: zu große zahlen

    Moritz - 14.12.2007, 22:19


    du kannst die zahlen in mehreren longints speichern. Du musst sie dann nur vor dem abspeichern jeweils z.B. mit 0.001 multiplizieren.



    Re: zu große zahlen

    dani93 - 14.12.2007, 22:29


    aha
    aber ich wollte wissen ob das dann vielleicht mit unsigned long int oder so geht aber da weiß ich die Buchstaben fürs printf nicht



    Re: zu große zahlen

    Moritz - 14.12.2007, 22:34


    na da kann ich dir nicht helfen.
    Ich kann (noch) kein C, nur pascal und assembler.



    Re: zu große zahlen

    Xin - 15.12.2007, 01:08


    Moritz hat folgendes geschrieben: du kannst die zahlen in mehreren longints speichern. Du musst sie dann nur vor dem abspeichern jeweils z.B. mit 0.001 multiplizieren.
    Okay, dann hast Du 0 * 1000 Herzschläge pro Sekunde, oder auch 0 * 1000 Herzschläge pro Minute. Solltest Du in Stunden rechnen, immerhin 3 * 1000 Herzschläge pro Stunde.
    Das könnte zu Ungenauigkeiten führen...

    unsigned long erlaubt Dir doppelt so große Zahlen (*2 im Positiven, dafür fehlen die negativen).
    *2 ist aber eigentlich recht uninteressant. Die Zahl wird kaum breiter: von 31 auf 32 Bit.

    dani93 hat folgendes geschrieben: Dann kommt natürlich eine riesige Zahl raus, für die nicht mal ein long int reicht. (Folge: sie wird negativ)
    Kann mir jemand sagen wie ich dieses Problem lösen kann?
    Ich rate erstmal zu double. Die Mantisse ist 52 Bit breit (der Bereich, in dem die Zahl gespeichert wird), da kommt also noch was, bis die überläuft. Zusätzlich hast Du einen 11 Bit breiten Exponenten, also das, was Moritz als festen Faktor (0,001) eingebaut hat, ist hier dynmisch. Bei zu großen oder zu kleinen Zahlen kommt es also zu Rundungsfehlern, wo dann eben nicht mehr jeder einzelne Herzschlag wirklich genau berechnet wird. Ebenso, wenn Du (im Binärsystem) unendlich lange Zahlen verrechnest (z.B. 0,1 dezimal ist binär unendlich lang), also wie Pi, welches im Dezimalsystem unendlich ist.
    Bei Deiner Rechnung sind die Zahlen vermutlich aber klein genug, um den Exponenten nicht zu reizen, ergo gibt es auch keine Rundungsfehler.

    Wenn Du eine Genauigkeit von über 52 Bit brauchst, geht mit 'long double' eventuell noch was bis 64 Bit, aber dann wirds langsam komplizierter...

    Auf neuen Systemen sollte auch 'long long int' gehen (64 Bit, kein Exponent).

    Kurz: statt "long herzschlaege" schreib "double herzschlaege". Um die Zahl per printf auszugeben, schreibst Du 'printf( "%lf\n", value );

    Moritz hat folgendes geschrieben: Ich kann (noch) kein C, nur pascal und assembler.
    Ich rate dazu, die Leichenfledderei einzustellen.
    Pascal ist Geschichte. C++ lebt trotz des hohen Alters weiter, weil es die mächtigste Sprache ist und da weder Sun, noch Microsoft sich bemühen etwas besseres zu machen, wird das auch noch eine Weile so bleiben.



    Re: zu große zahlen

    Moritz - 15.12.2007, 10:41


    allerdings ist pöascal ne gute anfängersprache, um die Grundlagen zu kapieren, wenn man danach Cg oder assembler lernen will.



    Re: zu große zahlen

    dani93 - 15.12.2007, 11:36


    Danke
    Problem gelöst.



    Re: zu große zahlen

    Xin - 15.12.2007, 13:32


    Moritz hat folgendes geschrieben: allerdings ist pöascal ne gute anfängersprache, um die Grundlagen zu kapieren, wenn man danach Cg oder assembler lernen will.

    Jow, das wurde mir auch immer erzählt.
    Wir hatten Pascal in der Schule. Da konnte ich allerdings schon Assembler und C. Ich würde die Sprache als kastriertes C bezeichnen. Die Grundzüge sind die selben, nur muss man sich an manchen Ecken furchtbar kompliziert ausdrücken im Vergleich zu C. Das beginnt in der Regel dann, wenn man anfangen möchte zu programmieren, also nicht nur "Hallo Welt" 5 mal innerhalb einer Schleife auf den Bildschirm schreiben.

    Pascal ist lesbarer. "begin" ist ein Wort. "{" ist eine Klammer. "begin" ist vielleicht leichter lesbar als "{", darum ist C kryptisch und Pascal ein Roman. Es ging aber doch ums Programmieren, da will ich vergleichsweise unwichtige Informationen wie den Anfang und Ende eines Blockes doch nicht als Prosa ausformuliert lesen, so dass ich in dem Buchstabenwirrwarr nach meinem Quelltext suchen muss. Ich "lese" Quellcodes nicht - ich guck da drauf und will wissen, wo die relevanten Informationen stehen. Begin und End und Procedure sind für mich nicht relevant.

    C und Pascal sind sich sehr ähnlich. Nur bereitet C auf die Zukunft vor und hat immernoch Zukunft und Pascal endete in Delphi und Borland beendete Delphi. Aus heutiger Sicht ist es interessanter Fortran zu lernen (um 1950) als Pascal (Ende der 60er).
    Wenn Du allerdings heute programmieren möchtest, dann würde ich mir etwas suchen, was den Jahrtausendwechsel überlebt hat.

    In Pascal musst Du sauber programmieren. In C lernst Du, warum.
    Was glaubst Du denn, was ein Pascalprogrammierer macht, wenn man ihm neue Möglichkeiten in die Hand gibt? Er benutzt sie.
    Und weil er es nicht gelernt hat, stürzen seine Programme laufend ab. Darum ist Pascal gut, um zu Programmieren zu spielen und C gut, um es zu lernen. Man muss nicht nur wissen, was geht, vor allem muss man wissen, was nicht geht.
    20 Befehle hintereinander zu schreiben hat nichts mit Programmieren zu tun.

    Jeder, dem ich Programmieren beibringe, lernt C. Mein letzter Schüler _wollte_ auch C lernen, also war er auch gut motiviert. Es hat iirc kein Jahr gedauert, da stand er als Mitentwickler von einem ICQ Client (Gaim oder wie er jetzt heißt), weil er Fehler im Sourcecode fand und konnte sich selbstständig in GUI-Programmierung einlesen. Er programmiert C und kennt die wichtigsten Programmiertechniken (Stacks, Listen..).
    So schlecht wie sein Ruf kann C gar nicht sein.
    Und selbst, wenn es das wäre - es ist der direkte Weg zum professionellen Programmieren.
    Man kann auch mit Java beginnen. Das ist das neue Pascal. Perfekt für Anfänger. Und das bleiben meistens auch Anfänger.



    Re: zu große zahlen

    Moritz - 15.12.2007, 13:56


    java is ja noch schlimmer, und wenn eine C-ähnliche Sprache, dann erst C# und dann Cg.



    Re: zu große zahlen

    DrPhil_Guth - 15.12.2007, 17:43


    Moritz hat folgendes geschrieben: java is ja noch schlimmer, und wenn eine C-ähnliche Sprache, dann erst C# und dann Cg.

    Java ist noch schlimmer? Inwiefern?
    Java unterstützt die wichtigsten Konzepte der Strukturierten Programmierung und ist hauptsächlich Objektorient.. Die reine Syntax ähnelt sehr stark der von C.

    C# ist in diesem sinne keinen deut besser als Java, denn sie ist ungefähr für die gleichen Ziele entwickelt worden.



    Re: zu große zahlen

    Moritz - 15.12.2007, 19:27


    java ist nbur son müll, für die die sich spiele proggen.



    Re: zu große zahlen

    Xin - 15.12.2007, 22:29


    Moritz hat folgendes geschrieben: java ist nbur son müll, für die die sich spiele proggen.

    Hmm... ich halte Java und C# für Fehlentwicklungen. Nichtsdestotrotz funktionieren Java und C# und das auch in aufwendigen Anwendungen.

    Im Vergleich zu Pascal und Delphi sind beide Sprachen von einer großen Entwicklergemeinde umgeben. Beides sind lebendige Sprachen - vermutlich sogar zu lebendig.

    Für Spiele eignet sich Java ebenfalls, allerdings würde ich hier wieder eher auf C++ setzen.

    DrPhil_Guth hat folgendes geschrieben: Moritz hat folgendes geschrieben: java is ja noch schlimmer, und wenn eine C-ähnliche Sprache, dann erst C# und dann Cg.

    Java ist noch schlimmer? Inwiefern?
    Java unterstützt die wichtigsten Konzepte der Strukturierten Programmierung und ist hauptsächlich Objektorient..
    Beide Sprachen sind - bis auf die Primitive - ausschließlich objektorientiert und das ist eher Manko als ein Vorteil.

    DrPhil_Guth hat folgendes geschrieben: C# ist in diesem sinne keinen deut besser als Java, denn sie ist ungefähr für die gleichen Ziele entwickelt worden.
    Bei C# hat man zwar nicht darüber nachgedacht, was man bei Java hätte besser machen können, aber wenigstens hat man nachgeguckt, wo man bei Java komplett ins Klo gegriffen hat.
    Von daher halte ich C# doch für einen Deut besser als Java.
    Aber wen kümmert's, beides sind Fehlentwicklungen.



    Re: zu große zahlen

    X - 17.12.2007, 01:10


    Zitat: Beide Sprachen sind - bis auf die Primitive - ausschließlich objektorientiert und das ist eher Manko als ein Vorteil.
    Wenn du so denks wirst du wohl eher keine Ahnung haben.
    OOP ist nunmal die letzte große Inovation in der Informatik!

    Zitat: Bei C# hat man zwar nicht darüber nachgedacht, was man bei Java hätte besser machen können, aber wenigstens hat man nachgeguckt, wo man bei Java komplett ins Klo gegriffen hat.
    So und was wäre das? Ich glaub nicht, das du auch nur annähernd die Unterschiede zwischen Java und C#(wobei ich an deiner Stelle lieber von .NET reden würde, was zeigt das du wirklich keine Ahnung hast!) kennst.

    Zitat: java ist nbur son müll, für die die sich spiele proggen.
    Ist ja nur eine Vermutung, aber ich würd mal sagen was die Menge an entwickelter SW angeht, machen Spiele einen Löwenanteil aus.



    Re: zu große zahlen

    Xin - 17.12.2007, 05:18


    X hat folgendes geschrieben: Zitat: Beide Sprachen sind - bis auf die Primitive - ausschließlich objektorientiert und das ist eher Manko als ein Vorteil.
    Wenn du so denks wirst du wohl eher keine Ahnung haben.
    Hmm.... das wäre eine denkbare Option.

    Ich programmiere erst seit 21 Jahren, habe ein Diplom in Informatik, meine Diplomarbeit ging über Design von Programmiersprachen, ich programmiere Compiler und verdiene mein Geld als Software-Entwickler, da hat man noch nicht soviel Ahnung.
    Das bedeutet nicht, dass ich alles weiß, aber es kommt grade in diesem Bereich eher seltener vor, dass mir jemand eine Lehrstunde erteilt. Aber ich bin immer gerne bereit dazu zu lernen und gespannt, was Du mir beibringen kannst.

    X hat folgendes geschrieben: OOP ist nunmal die letzte große Inovation in der Informatik!
    Dann hast Du aber einiges verpasst. Wie wär's zum Beispiel mit AOP?

    Die Tatsache, dass es Innovationen gibt, bedeutet nicht, dass es sinnvoll ist, sie grundsätzlich anzuwenden. Das Flugzeug ist im Vergleich zur Bahn eine Innovation. Wenn ich aber von Köln nach Düsseldorf möchte, reise ich seltener mit dem Flugzeug. Nenn mich altmodisch, aber um von Köln nach Düsseldorf (30km) zu fliegen, muss man in Frankfurt (200km von Köln) umsteigen, da bin ich mit der Bahn schneller.
    Java ist grundsätzlich "innovativ", C++ ist schnell, entweder durch altmodische oder "innovative" Techniken - das kann ich als Entwickler so wählen, wie es für die derzeitige Situation sinnvoll ist.

    X hat folgendes geschrieben: Zitat: Bei C# hat man zwar nicht darüber nachgedacht, was man bei Java hätte besser machen können, aber wenigstens hat man nachgeguckt, wo man bei Java komplett ins Klo gegriffen hat.
    So und was wäre das? Ich glaub nicht, das du auch nur annähernd die Unterschiede zwischen Java und C#(wobei ich an deiner Stelle lieber von .NET reden würde, was zeigt das du wirklich keine Ahnung hast!) kennst.
    Ich rede aber nicht von .NET, sondern von Java und C#.
    Ich halte beispielsweise out und ref in C# für Fortschritte, weil sie das sinnlose zusammenpacken von Rückgabe werten in Rückgabeobjekte (die man ja auch erstmal erzeugen muss) verhindert. Das spart Zeit und gibt zusätzlich Auskunft darüber, ob der Pointer initialisiert übergeben werden muss oder nicht.

    Ich halte die unsafe Funktionalität von C# für wichtig, weil sie den Zugriff auf tiefere Ebenen des OS erlaubt, ohne C++ anzuwerfen.



    Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken



    Weitere Beiträge aus dem Forum Tutorials.at

    @Walgo - gepostet von Xin am Samstag 21.07.2007
    meine Homepage - gepostet von Dubbel am Samstag 20.01.2007
    Berechnung einer quadratischen Funktion. - gepostet von Kimi am Donnerstag 08.11.2007
    zwei Funktion gleichteitig - gepostet von Elch am Montag 20.08.2007
    Suche: [color=red]ADA 2005 Compiler[/colo, [co und[color=red - gepostet von anarchist am Sonntag 20.05.2007
    Turbo C? - gepostet von G_0_M am Sonntag 25.11.2007
    Syntax error ????????? - gepostet von Akira am Sonntag 28.10.2007
    video automatisch starten? - gepostet von pliman am Donnerstag 03.08.2006
    Hello World - gepostet von icewulf24 am Mittwoch 03.10.2007



    Ähnliche Beiträge wie "zu große zahlen"

    Der große Sake Thread ^^ - Tidus4000 (Samstag 01.07.2006)
    Große Scheiße - Anonymous (Montag 17.04.2006)
    zahlen Q 1 / 05 - stockmarket (Mittwoch 04.05.2005)
    Das GROßE Fragenspiel - Kathi_7aG (Montag 12.11.2007)
    ~*Die Große Konzerthalle*~ - Tom (Freitag 02.11.2007)
    Zahlen Thread - Sunny (Donnerstag 23.11.2006)
    Zahlen-Thread - AmericanPsycho (Mittwoch 30.05.2007)
    Große Kisten - für TK - Pilli (Dienstag 18.12.2007)
    Krams: Der große K und seine Macken - Wintermute (Freitag 21.07.2006)
    zahlen spam rückwärts - gotmog (Samstag 10.02.2007)