.
|
|
| Autor | Beitrag |
|---|---|
|
000 01.06.2002, 20:04 Exec |
tag allerseits gibts in c++ irgendne möglichkeit mit "pi" (also zum kreisberechnen halt) was zu machen? also, das is ja ne unendlich, unperiodische zahl ... wie kann ich die benutzten? pi = 3,1415926535897932384626433832795; //zahl ausm windows rechner geht ja nich ... (constant too big) thx --"selbermachen rockt am meisten :D" - -LeJean- |
|
Profil || Suche |
|
001 01.06.2002, 20:23 apfelkorn |
genau so, wie du auch pi in der mathematik benutzt. vorallem wirst du es wohl in der trigonometrie brauchen zum umrechnen von grad-zahlen in für c brauchbare bogenmaß-werte zu errechnen, die von asin etc. benötigt werden. für normale berechnungen wird es allerdings reichen, wenn du #define pi 3. 14159265 benutzt --Dieser Beitrag wurde am 01.06.2002 um 20:25 von apfelkorn bearbeitet. |
|
Profil || Suche |
|
002 01.06.2002, 20:50 Exec |
k, also mit nem define ... ja, ich will nur nen kleinen dreckigen kreisumfang rechner machen :) *e* hmm, dumme frage, nützt aba nichts...: "selbermachen rockt am meisten :D" - -LeJean- Dieser Beitrag wurde am 01.06.2002 um 20:54 von Exec bearbeitet. |
|
Profil || Suche |
|
003 01.06.2002, 21:19 Archangel |
in dem du die zahl als float (besser: double) ausgibst ? poste am besten mal den code, wo nur das zeichen vor dem punkt angezeigt wird. -- |
|
Profil || Suche |
|
004 01.06.2002, 21:37 Exec |
ahhhh - mit nem float gehts ... yo, ich hatte es vorher schonmal als float gemacht, weil ich das eigendlich noch in erinnerung hatte, das es da stellen nachm koma gibt (stand ja auch so im buch) ... nur hatte ich int u; //umfang ;) u = 2*pi*r; so, da aba u nen int is, konnte es ja nich gehn ;) jetzt hab ich u gefloatet und es geht :) trotzdem thx *e* so, hier mal der ganze source meines kreisumfang-berechnungs-tool
verbessrungsvorschläge? *e* include is jetzt weg ;) --"selbermachen rockt am meisten :D" - -LeJean- Dieser Beitrag wurde am 01.06.2002 um 22:06 von Exec bearbeitet. |
|
Profil || Suche |
|
005 01.06.2002, 21:54 mani |
ja, zu was brauchst #include <iomanip> ? -- |
|
Profil || Suche |
|
006 01.06.2002, 22:05 Exec |
yo, das weis ich nich, die hab ich halt mal zum ausprobieren von setw() noch dringehabt *g* - is wieder raus :) --"selbermachen rockt am meisten :D" - -LeJean- |
|
Profil || Suche |
|
007 01.06.2002, 23:04 Leviathan |
mach pi nicht mit #define, sondern mit const double, das ist typensicher. so: const double pi=3.14159265; und float würde ich nicht mehr verwenden, das ist unzeitgemäß sofern das programm nicht für microcontroler oder sonstwelche rechner mit wenig speicher ist. --Entities: HL | HL² |
|
Profil || Suche |
|
008 01.06.2002, 23:14 Exec |
ok *merk* und vom aufbau her isses auch ok, oder gibts da noch vorschläge? ich geb euch mal den neuen code,da das ja nun wirklich nich sehr komplex is, und man da ja nich viel falsch machen kann, vom aufbau her ..
"selbermachen rockt am meisten :D" - -LeJean- |
|
Profil || Suche |
|
009 02.06.2002, 00:00 Leviathan |
ist das für ein microcontroller oder einen rechner mit sehr wenig ram oder liest du meinen post nicht richtig (ja, ist halt etwas schwer um die uhrzeit)?
ansonsten würde ich die modusauswahl mit if ... else if oder einem switch case machen, und auf jeden fall einen default-zweig, also eine meldung oder so etwas wenn der benutzer etwas ungültiges eingegeben hat. und diese hier:
ja wenn du schon kritik haben willst... *g* :edit: Entities: HL | HL² Dieser Beitrag wurde am 02.06.2002 um 00:02 von Leviathan bearbeitet. |
|
Profil || Suche |
|
010 02.06.2002, 00:06 Onkel Dittmeyer |
Nee der is bei mir auch so breit. (Opera) -- Dieser Beitrag wurde am 02.06.2002 um 00:10 von [dP]ThEpOpE bearbeitet. |
|
Profil || Suche |
|
011 02.06.2002, 00:10 Exec |
@pope: das versuch ich auch gerade rauszufinden :) @levi: yo, ich will kritik, nur so lernt man :) - also, da es nun, nen super-miniprog is, stört es doch nich weiter, das ich floats verwende, oder? oder allgemein nur noch doubles nehmen? --"selbermachen rockt am meisten :D" - -LeJean- |
|
Profil || Suche |
|
012 02.06.2002, 00:17 Archangel |
klar is switch/else if günstiger, wenn auswahl 1 is, muss nur einmal verglichen werden, wenns 2 is, 2mal.., und bei 4 4mal.. bei execs version muss in jedem fall 4mal verglichen werden, und es is natürlich auch blödsinn abzufragen, ob auswahl 3 is, wenn man weiß, dass auswahl a.) 1 ist und b.) sich seitdem nicht verändert hat -- |
|
Profil || Suche |
|
013 02.06.2002, 00:40 Leviathan |
@exec: ich nehm nur noch double, float verwende ich sogut wie nie. @archangel und die frage mit dem switch: die if ... if ... if ... lösung ist die schlechteste, da wie gesagt die vergleiche öfter gemacht werden. die switch-case lösung ist eigentlich die beste, sie ist nur unflexibel. es lässt sich z.b. kein größer als ( > - operator) prüfen. ich bevorzuge daher if ... else if ... lösung, etwa so bei dir (das sprengt jetzt bestimmt die forenbreite...) :
um den vorteil zu erkennen, muss man das programm im kopf mal ablaufen lassen und dabei darauf achten, wohin nach einem if jeweils gesprungen wird. :edit: Entities: HL | HL² Dieser Beitrag wurde am 02.06.2002 um 00:40 von Leviathan bearbeitet. |
|
Profil || Suche |
|
014 02.06.2002, 02:17 Tron |
@levi: die wahl float/double mach ich einfach davon abhaengig, wie genau die berechnung sein muss, float mit 32bit hat 6 signifikante stellen, double mit 64bit hat 12 (? net ganz sicher, aber grade kein buch zur hand zum nachschauen), und dann waere da noch long double mit satten 80bit, das hat 17 (?). btw: diese bitbreiten muessen nicht auf allen reuchnern so sein, aber i386+ handhaben das so. @exec:
achtung: unbedingt auf das break achten, sonst kommt es zum sogenannen 'fall through', also die befehle des naechsten case werden ebenfalls ausgefuehrt.
<edit>hab code /code vergessen</edit> --'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams 'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett Dieser Beitrag wurde am 02.06.2002 um 02:18 von Tron bearbeitet. |
|
Profil || Suche |
|
015 02.06.2002, 14:54 Onkel Dittmeyer |
@levi Dieser Beitrag wurde am 02.06.2002 um 14:55 von [dP]ThEpOpE bearbeitet. |
|
Profil || Suche |
|
016 02.06.2002, 15:28 Archangel |
@thepope: nein, so geht er nicht vor, er geht so vor (bei if, if, if...): falls 1, das und das ausführen, danach springen zu teste2, ansonsten code weiter abarbeiten es wird also bei if, if, if... in jedem falle 4mal der wert der variable geprüft -- |
|
Profil || Suche |
|
017 02.06.2002, 15:43 Onkel Dittmeyer |
Achso jetzt hab ichs... thx! Dieser Beitrag wurde am 02.06.2002 um 15:45 von [dP]ThEpOpE bearbeitet. |
|
Profil || Suche |
|
018 02.06.2002, 18:08 Prefect |
Wrt Datentypen: Wrt if/if-else/switch: Gegen den ?: (ternären) Operator spricht auch nichts. cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
019 02.06.2002, 19:14 Tron |
iirc rechnet die fpu intern immer mit den vollen 80bit, aber beschwoeren will ich das jetzt nicht. zum thema int vs. der rest der welt hat prefect natuerlich voellig recht, am besten fuer schleifenzaehler und so kram immer int. --'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams 'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett |
|
Profil || Suche |
|
020 02.06.2002, 20:02 apfelkorn |
Was aber gegen den tenären Operator spricht ist: Wenn du zum Beispiel einem Unwissenden ein Stück Code vorlegst wo drinsteht: if ( lesbar ) Dagegen beim ternären: lesbar ? read(wasweisich) : fehler(kann nicht lesen); da weis man garnicht was was ist... -- |
|
Profil || Suche |
|
021 02.06.2002, 20:40 Leviathan |
hey jetzt werft mal if und ?: nicht durcheinander, ?: ist ein operator, und zwar ein ternärer wie schon gesagt wurde (konditionaler dreifachoperator heisst der auf deutsch). er ist nur dann zu verwenden, wenn einer der wert eines ausdrucks von einer bedingung abhänging gemacht werden soll, z.b. das maximum zweier zahlen ausgegeben werden soll, hier (nur c, nicht c++):
zu dem int: wenn man für 386 aufwärts-kompatible pcs programmiert ist der wertebereich von int gleich dem von long. ich wusste nicht, dass der compiler da einen unterschied macht. und wie sieht es mit char aus? char ist ja nur 1 byte groß, aber für manche sachen ist das vollkommen ausreichend. (z.b. für den ascii und den ansi-code wie man am namen char erkennen kann) kann mir den genauen unterschied zwischen int und long nochmal jemand erklären? man merkt hier glaube ich, dass ich keinerlei assembler / maschinensprachen-kenntnisse habe. :edit: Entities: HL | HL² Dieser Beitrag wurde am 02.06.2002 um 20:41 von Leviathan bearbeitet. |
|
Profil || Suche |
|
022 02.06.2002, 23:52 Kriz |
1. Wer den trinären/ternären (beide Begrifflichkeiten sind korrekt, ich bevorzuge trinär, da ternär wie die drei Tenöre klingt) Bedingungsoperator ?: nicht aus einem C/C++ Code herausinterpretieren kann, der sollte die Finger von den beiden Sprachen lassen. Er fördert zwar bei Verschachtelungen nicht unbedingt die Lesbarkeit, ist aber kurz und knackig! 2. Wie sooft wiederholt: CPU <= 286: short = 16 Bit, int = 16 Bit, long = 32 Bit Int ist der native Datentyp für die CPU. Eine <= 286er CPU hat also einen nativen 16 Bit Datentyp, eine >= 386er CPU dagegen einen nativen 32 Bit Datentyp. Daher bezeichnet int auch eben den nativen Begriff "Ganzzahl" (integer). Short als Datentyp ist das Zugeständnis an das standardisierte WORD aus der Informatik. Ein Wort hat immer 16 Bit, egal auf welchem System. Long dagegen sollte einst größere Wertebereiche darstellen, als die Maschine nativ überhaupt darstellen kann. Auf <= 286er CPUs ist das ersichtlich, da 32 Bit Breite. Auf >= 386er CPUs dagegen scheint long irgendwie überflüssig, ist es aber nicht. Spätestens auf IA64 CPUs wird long dann 64 Bit Breite haben und den nächstgrößeren Schritt im ganzzahligen Wertebereich darstellen. Außerdem gibt es mit großer Wahrscheinlichkeit Computer (Main- und Midframes), die bereits long als 64 Bit Wert interpretieren. Daher wird ein C/C++ Programm, welches mit long arbeitet und dessen Quellcode auf "mächtigere" Rechner portiert wird, eben automatisch statt 32 Bit dann 64 Bit für long bereitstellen. 3. Zu der FPU und den 80 Bit Berechnungen möchte ich nur sagen, daß dies nur auf moderne Prozessoren ab Pentium II/K6 zutrifft. Diese Prozessoren haben 8 FPs (floating point registers) je 80 Bit Breite, können also 8 long double Zahlen "gleichzeitig" aufnehmen, 20 double Zahlen oder 40 float Zahlen. Daher ist Prefects Anmerkung über den Gebrauch von float Zahlen diesbezüglich richtig. Sie werden schneller abgearbeitet als double oder gar long double Zahlen, die die FPU erreichen. Andererseits ist es aber auch wieder fraglich, inwiefern dieser "kleine" Datentyp in der Praxis auf solch hochgezüchteten CPUs vertretbar ist, falls es um Genauigkeit geht. Hier wären double Zahlen die goldene Mitte. Long double Zahlen habe ich persönlich so gut wie nie gebraucht. Cu --K:R-I)Z++ |
|
Profil || Suche |
|
023 03.06.2002, 01:46 Tron |
hm... 8*80/64 ist bei mir 10 und 8*80/32 20, aber das ist sowieso egal, da es sowieso nur die register st0 bis st7 (oder st(0) bis st(7), je nach assembler) gibt. oder unterliege ich da einer fehlinformation? 'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams 'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett |
|
Profil || Suche |
|
024 03.06.2002, 10:42 Kriz |
Ups, da habe ich mich wohl vertan. Es sind natürlich 10 double Zahlen oder 20 float zahlen. Thx 2 Tron =) --K:R-I)Z++ |
|
Profil || Suche |
|

