Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
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-

zum Seitenanfang zum Seitenende 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.
zum Seitenanfang zum Seitenende 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...:
wie kann ich mir auch die zeichen nachm komma anzeigen lassn? (bei ner ausgabe)

--

"selbermachen rockt am meisten :D" - -LeJean-


Dieser Beitrag wurde am 01.06.2002 um 20:54 von Exec bearbeitet.
zum Seitenanfang zum Seitenende 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.

--

Mar 01 01:10:13 <voice> jo
Mar 01 01:10:40 <voice> bis dann ^^
Mar 01 01:11:20 <Archangel> jo
**** ENDING LOGGING AT Tue Mar 1 01:58:13 2005

zum Seitenanfang zum Seitenende 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 ;)
float r; //radius

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

Quellcode:
#include <iostream>

#define pi 3.14159

using namespace std;

int main()
{
    float d, r;
    int auswahl;
    float u;

    cout << "Kreis berechnen mit:\n(1) Radius\n(2) Durchmesser\n";
    cin >> auswahl;

    if(auswahl == 1)
    {
        cout << "Radius angeben:";
        cin >> r;
    }
    else
    {
        cout << "Durchmesser angeben:";
        cin >> d;
    }

    if(r > 0)
    {
        u = 2 * pi * r;
        cout << "Der Kreisumfang betraegt: " << u << endl;;

        cout << "pi: " << pi;
    }
    if(d > 0)
    {
        u = pi * d;
        cout << "Der Kreisumfang betraegt: " << u << endl;
    }
    

    return(0);
}

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.
zum Seitenanfang zum Seitenende Profil || Suche
005
01.06.2002, 21:54
mani



ja, zu was brauchst #include <iomanip> ?

--

zum Seitenanfang zum Seitenende 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-

zum Seitenanfang zum Seitenende 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²
Kompilierfehler
r_speeds | mehr über r_speeds

zum Seitenanfang zum Seitenende 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 ..

Quellcode:
#include <iostream>
#include <conio.h>

using namespace std;

int main()
{
    float d, r, r2, d2;
    int auswahl;
    float u, a;
    const double pi=3.14159265;

    cout << "Exec's amazing Kreisrechner :) \n" << endl;
    cout << "Berechnen:\n(1) Umfang mit Radius\n(2) Umfang mit Durchmesser\n(3) Flaeche mit Radius\n(4) Flaache mit Durchmesser\n";
    cin >> auswahl;

        if(auswahl == 1)
        {
            cout << "Radius angeben: ";
            cin >> r;
        }
        if(auswahl == 2)
        {
            cout << "Durchmesser angeben: ";
            cin >> d;
        }
        if(auswahl == 3)
        {
            cout << "Radius angeben: ";
            cin >> r2;
        }
        if(auswahl == 4)
        {
            cout << "Durchmesser angeben: ";
            cin >> d2;
        }

            if(r > 0)
            {
                u = 2 * pi * r;
                cout << "Der Kreisumfang betraegt: " << u << endl;;
            }
            if(d > 0)
            {
                u = pi * d;
                cout << "Der Kreisumfang betraegt: " << u << endl;
            }
            if(r2 > 0)
            {
                a = (r2*r2)*pi;
                cout << "Der Flaecheninhalt betraegt: " << a << endl;
            }
            if(d2 > 0)
            {
                a = (pi/4)*(d2*d2);
                cout << "Der Flaecheninhalt betraegt: " << a << endl;
            }

    

    getch();
    return 0;
    
}

--

"selbermachen rockt am meisten :D" - -LeJean-

zum Seitenanfang zum Seitenende 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)?

Zitat:
und float würde ich nicht mehr verwenden

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:

Zitat:

Quellcode:
cout << "Berechnen:\n(1) Umfang mit Radius\n(2) Umfang mit Durchmesser\n(3) Flaeche mit Radius\n(4) Fla[b]a[/b]che mit Durchmesser\n";

//und diesen hier:
//...

cout << "Der Kreisumfang betraegt: " << u << endl;[b];[/b]

ja wenn du schon kritik haben willst... *g*

:edit:
warum ist mein post denn jetzt so breit? liegt das nur an meinem netscape oder ist das bei euch auch so?

--

Entities: HL | HL²
Kompilierfehler
r_speeds | mehr über r_speeds


Dieser Beitrag wurde am 02.06.2002 um 00:02 von Leviathan bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
010
02.06.2002, 00:06
Onkel Dittmeyer



Nee der is bei mir auch so breit. (Opera)
Jetzt hätt ich auch mal ne Frage weils mir gerade so ins Auge sticht:

Zitat:
Quellcode:
if(auswahl == 1)
        {
            cout << "Radius angeben: ";
            cin >> r;
        }
        if(auswahl == 2)
        {
            cout << "Durchmesser angeben: ";
            cin >> d;
        }
        if(auswahl == 3)
        {
            cout << "Radius angeben: ";
            cin >> r2;
        }
        if(auswahl == 4)
        {
            cout << "Durchmesser angeben: ";
            cin >> d2;
        }
[/quote]

Ist es bei sowas nicht günstiger switch - case zu verwenden? Und bringt das eigentlich von der Codeoptimierung was?

--


Dieser Beitrag wurde am 02.06.2002 um 00:10 von [dP]ThEpOpE bearbeitet.
zum Seitenanfang zum Seitenende 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-

zum Seitenanfang zum Seitenende 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

--

Mar 01 01:10:13 <voice> jo
Mar 01 01:10:40 <voice> bis dann ^^
Mar 01 01:11:20 <Archangel> jo
**** ENDING LOGGING AT Tue Mar 1 01:58:13 2005

zum Seitenanfang zum Seitenende Profil || Suche
013
02.06.2002, 00:40
Leviathan



@exec: ich nehm nur noch double, float verwende ich sogut wie nie.
genau wie int, ich nehm entweder long, short oder char.

@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...) :

Quellcode:

if(auswahl == 1)
    {
    cout << "Radius angeben: ";
    cin >> r;
}
else if(auswahl == 2)
{
    cout << "Durchmesser angeben: ";
    cin >> d;
}
else if(auswahl == 3)
{
    cout << "Radius angeben: ";
    cin >> r2;
}
else if(auswahl == 4)
{
    cout << "Durchmesser angeben: ";
    cin >> d2;
}
else
{
    //default-zweig
    cout<<"irgenteine warnmeldung "falsche eingabe""<<endl;
}

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:
hat nicht die forenbreite gesprengt...

--

Entities: HL | HL²
Kompilierfehler
r_speeds | mehr über r_speeds


Dieser Beitrag wurde am 02.06.2002 um 00:40 von Leviathan bearbeitet.
zum Seitenanfang zum Seitenende 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:
halte den gueltigkeitsbereich (scope) von variablen moeglichst klein, das heisst deklariere sie erst, wenn du sie wirklich brauchst. in deinem falle u und a erst innerhalb der jeweiligen ifs deklarieren, am besten in der zeile, in der es auch einen wert zugewiesen bekommt, also: double u = 2 * pi * r;
zudem sind die 2te haelfte deiner ifs ueberfluessig, mach das einlesen und das ausgeben doch einfach in den selben block.
ich wuerde dir auch unbedingt zu switch raten, das ist viel lesbarer, ausserdem kann der complier evtl. etwas rumoptimieren (ok, bei dir nicht wirklich wichtig, ob das jetzt ne nanosekunde schneller geht oder nicht)

Quellcode:switch (auswahl)
{
  case 1:
  {
    cout << "Radius angeben: ";
    double r;
    cin >> r;

    double u = 2 * pi * r;
    cout << "Der Kreisumfang betraegt: " << u << endl;
    // oder direkt: cout << "Der Kreisumfang betraegt: " << 2 * pi * r << endl;

    break;
  }

  case 2:
  {
    // blablubb
    break;
  }

  case 3:
  {
    // blablubb
    break;
  }

  case 4:
  {
    // blablubb
    break;
  }

  default:
    cout << "i said 1 till 4, dickhead!\n";
}

achtung: unbedingt auf das break achten, sonst kommt es zum sogenannen 'fall through', also die befehle des naechsten case werden ebenfalls ausgefuehrt.
das kann aber eventuell auch beabsichtigt sein, z.b. geht auch:

Quellcode:switch (lalilu)
{
  case 1:
  case 2:
  {
    break;
  }

  case 3:
  {
    /* nach diesen befehlen hier, werden auch die von fall 4 verarbeitet, da kein break!
    dies ist zwar meistens ein fehler, aber in manchen faellen kann das auch beabsichtigt sein */
  }

  case 4:
  {
    break;
  }

  default:
    // falls du keinen default-fall hast, kannst du default auch einfach weglassen
}

<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.
zum Seitenanfang zum Seitenende Profil || Suche
015
02.06.2002, 14:54
Onkel Dittmeyer



@levi
Ich versteh net so ganz was an else if besser sein soll als die einzelnen if Abfragen in diesem Fall hier. Es geht ja so vor:
Variable Prüfen
Falls 1, das und das...
Falls anderes, weiterprüfen
Falls 2, das und jenes...
Falls anderes, wieder weiterprüfen.... usw.
Ich meine geprüft wird genauso wie bei if und switch, nämlich alles linear nacheinander.
Erklär mal bitte ich komme wirklich gerade net drauf =)

--


Dieser Beitrag wurde am 02.06.2002 um 14:55 von [dP]ThEpOpE bearbeitet.
zum Seitenanfang zum Seitenende 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
teste2:
falls 2, das und das ausführen, danach springen zu teste3, ansonsten code weiter abarbeiten
teste3:
[etc etc]

es wird also bei if, if, if... in jedem falle 4mal der wert der variable geprüft

--

Mar 01 01:10:13 <voice> jo
Mar 01 01:10:40 <voice> bis dann ^^
Mar 01 01:11:20 <Archangel> jo
**** ENDING LOGGING AT Tue Mar 1 01:58:13 2005

zum Seitenanfang zum Seitenende Profil || Suche
017
02.06.2002, 15:43
Onkel Dittmeyer



Achso jetzt hab ichs... thx!
Aber ich find switch case trotzdem eleganter =)
Und wo wir gerade bei "Abfragen" sind:
Es gibt ja noch diese Methode für simplere Abfragen:
Quellcode:
//include sparen wir uns *g*
void main()
{
int a = 0, b = 0, c = 0;
cin>>b;
cin>>c;
[b]a = b < c ? c : b;[/b]
cout<<a;
}

Oder so ähnlich zumindest ;) Hab damit noch nie gearbeitet, also falls es falsch ist möge man mich aufklären. Egal, ihr wisst was ich meine.
Jetzt frag ich mich ob diese Methode empfehlenswert ist sofern man in eine solche Situtation kommt?
/edit
wie nennt man diese methode eigentlich?

--


Dieser Beitrag wurde am 02.06.2002 um 15:45 von [dP]ThEpOpE bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
018
02.06.2002, 18:08
Prefect



Wrt Datentypen:
long und short statt int zu verwenden ist nonsense. Per Definition ist int der "native" Datentyp, d.h. der Prozessor kann mit ints immer am besten umgehen, sie sind daher am effizientesten. short ist für die 386+-Prozessoren ein katastrophaler Datentyp, weil dann jede einzelne Assembleranweisung ein Argumentgrößenprefix benötigt.
float und double bin ich mir nicht so sicher. doubles benötigen doppelt so viel Speicherplatz wie floats, was evtl. auf den Cache gehen kann. Zudem dauern komplexe Operationen (d.h. Kreisfunktionen, Wurzel, Division) für doubles vermutlich länger als für floats. Getestet habe ich das auf neueren Prozessoren allerdings nicht.

Wrt if/if-else/switch:
if-else ist natürlich besser als if. Manche Compiler können das eventuell optimieren, aber ein "else if" drückt den Sinn des Codes einfach besser aus.
Wenn man switch verwenden kann ist switch mindestens genauso effizient wie if-else, tendenziell aber effektiver: der Compiler kann dann leichter optimieren, z.B. über einen binären Entscheidungsbaum oder eine Jumptable.

Gegen den ?: (ternären) Operator spricht auch nichts.

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
019
02.06.2002, 19:14
Tron



Zitat:
Prefect postete
float und double bin ich mir nicht so sicher. doubles benötigen doppelt so viel Speicherplatz wie floats, was evtl. auf den Cache gehen kann. Zudem dauern komplexe Operationen (d.h. Kreisfunktionen, Wurzel, Division) für doubles vermutlich länger als für floats. Getestet habe ich das auf neueren Prozessoren allerdings nicht.

iirc rechnet die fpu intern immer mit den vollen 80bit, aber beschwoeren will ich das jetzt nicht.
double (64bit) ist beim transfer vom/zum ram auf jeden fall langsamer als float (32bit), da der datenbus ja schlieslich nur 32bit breit ist, was 2 (oder falls kein korrektes alignment 3) transfers benoetigt, ok, der cache kann das wieder etwas ausbuegeln, falls der entsprechende speicherbereich bereits gechached ist.
deshalb immer den datentyp nehmen, der am geeignetsten in hinsicht auf praezision und wertebereich ist.

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

zum Seitenanfang zum Seitenende Profil || Suche
020
02.06.2002, 20:02
apfelkorn



Was aber gegen den tenären Operator spricht ist:
Den ?:-Vergleichsoperator kannst du nicht in einem runterlesen, und in Zeiten von 80GB Festplatten wird man wohl auch das kleine bisschen Schreibarbeit zugunsten der Übersichtlichkeit opfern können.

Wenn du zum Beispiel einem Unwissenden ein Stück Code vorlegst wo drinsteht:

if ( lesbar )
read(wasweisich);
else
fehler(Kann nicht lesen);

Dagegen beim ternären:

lesbar ? read(wasweisich) : fehler(kann nicht lesen);

da weis man garnicht was was ist...

--

zum Seitenanfang zum Seitenende 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++):

Quellcode:
#include<stdio.h>

void main()
{
    int a=0,b=0;    //dem int widme ich mich noch
    printf("2 werte eingeben:\n");
    scanf("%d",&a);
    scanf("%d",&b);
    printf("\n\n\ndas maximum von %d und %d ist %d",a,b,(a<b)?b:a);
}

das kann man natürlich auch mit einem if machen, finde ich aber schwieriger.
allerdings gibt es if ´s, die nicht oder nur mit erheblichem aufwanf durch ?: zu ersetzen sind, z.b. die modusauswahl in execs programm.

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:
achja zu apfelkorn: ?: ist prinzipiell etwas schwerer zu lesen als if, allerdings ist das mit etwas erfahrung im umgang mit ?: kein problem.

--

Entities: HL | HL²
Kompilierfehler
r_speeds | mehr über r_speeds


Dieser Beitrag wurde am 02.06.2002 um 20:41 von Leviathan bearbeitet.
zum Seitenanfang zum Seitenende 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
CPU >= 386: short = 16 Bit, int = 32 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++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
023
03.06.2002, 01:46
Tron



Zitat:
Kriz postete
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.

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?
ich muss mir dringend mal wieder eine doku ueber fpus zu gemuete fuehren.
ich halte floats immernoch fuer datenbus-freundlicher

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende 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++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche