PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programmierprobleme



Stephan
09.11.2002, 13:54
Servus

Ich muss zur Zeit wegen meinem Studium C programmieren! Ich hab jetzt kleine Probleme, und weiß nicht ob mein Compiler Amok läuft oder ich was falsche eintippe.

wenn ich ne Variable als float deklariere, und dann der Variablen den Wert 1/3 zuweise, gibt der Cumputer bei der ausgabe immer 0.00000 aus. Das sollte eigentlich ja nicht sein. geb ich der Variablen gleich den Wert 0,33 wird dies auch ausgegeben. Genauso wenn ich 4/2 mache gehts ohne Probleme. Was läuft dann bei 1/3 falsch???

Shawn
09.11.2002, 14:21
Also, C++ progge ich noch nicht lange, aber bei VB hatte ich ein ähnliches Problem.
Der kommt mit der Periodenzahl nicht zurecht. Versuch es mal so zu machen, das der nicht mehr als 3 Stellen hinter dem "," ausgeben soll.

Ich denke mal, dürfte funktionieren, so wie ich dich jetzt verstanden habe.

Stephan
09.11.2002, 14:27
Da gibts das gleiche Problem!!
Aber es liegt auch net an der Periode! Bei 1/2 kommt das gleiche.

StrgAltEntf
09.11.2002, 23:47
Versuch's mal mit 1/3.0 !!
Bei 1/3 macht er ne Integer- Division und wandelt das dann in float um - zumindest isses in Java so!

Update:
Hab's grad in C++ ausprobiert und gleicher Effekt (welch Wunder;))

[ab]noname
09.11.2002, 23:51
das ganze geht so und liegt darin begründet, dass C++ wie oben gesagt durch implizite Typwandlung davon ausgeht, dass 1 und 3 Integer sind und da keine Division sondern den "Einpassfaktor" (oder wie man das nennt) ermittelt und da die 3 0x in die 1 passt, ist es halt 0 ;)

float fltZielvar;

fltZielvar = static_cast<float>(1) / static_cast<float>(3);

mabon
30.04.2007, 02:29
Wie bekomm das in Java hin, eine neue Seite (im Frame)
anzulegen und diese dann auch als solche in einer Seiten-Übersichtsliste auf
der rechten Seite des Hauptfensters mit anzeigen zu lassen?

Hab da vieles probiert und keinen Schimmer wie ich das bewerkstelligen kann.

Es geht darum: ein Tool zu vorläufigem Design/Aufbau von Websites mit Anordnung von Fenstern und einigen Werkzeugen zur Unterteilung.
Und die neuen (Web-)Seiten sollen in einer Übersichtsleiste an der Seite der Hauptansicht sichtbar sein.

Ragas
30.04.2007, 02:57
1.: Wir haben nen Separates Unterforum für programmierung.

und 2.:

Wie bekomm das in Java hin, eine neue Seite
anzulegen und diese dann auch als solche in einer Seiten-Übersichtsliste auf
der rechten Seite des Hauptfensters mit anzeigen zu lassen? ???

Hab da vieles probiert und keinen Schimmer wie ich das bewerkstelligen kann.*noahnung*

Hä? Ich hätt gern auch was von dem grünen dingsda.*buck*
Nen bisschen präziser soltest du dich schon ausdrücken.

mabon
30.04.2007, 11:19
Ja, hab ich dann auch gesehen, das mit dem Forum.
Da hab ich mich dann auch mal versucht präziser auszudrücken.

UeB
30.04.2007, 12:07
ich würde mir in C/C++ angewöhnen immer alle Gleitkommazahlen, die fest im Code stehen mit nem . zu schreiben auch wenn sie gerade zufällig einer ganzen Zahl entsprechen. Also zum Beispiel

double a1 = 2.0;
dann erkennt man auch immer gleich an der Zuweisung welchen Typ die variable a1 hat wenn sie später umdefiniert wird

a1 = 5.0; //wenn das ein paar hudert Zeilen später passiert weißt du sofort, dass a1 eine Gleitkommazahl ist

und es passieren eben keine Fehler durch dieses doofe implizite Umwandeln des Compiler

eamC
30.04.2007, 12:38
Noch genauer wäre es den Typ explizit zu nennen, damit der Compiler eindeutig weiß mit welcher Zahl er es zu tun hat.

float x = 12.0f;

In Deinem Fall also:

float x = 1.0f / 3.0f;

Da der Compiler zumeist bei einer Kommazahl von einer Double ausgeht und diese dann ins Float casten würde, sollte mein beim Zuweisen von Float-Werten sowieso immer das f dahinterhängen.



#include <iostream>
using namespace std;

void foo( int );
void foo(double);
void foo(float);

int main(int argc, char* argv[])
{
foo(12.0);
return 0;
}

void foo(int x )
{
cout << "I am an INT" << endl;
}

void foo(double x)
{
cout << "I am a DOUBLE" << endl;
}

void foo(float x)
{
cout << "I am a FLOAT" << endl;
}

Dieses C++ Programm gibt bei foo(12.0) "I am a DOUBLE" aus, bei expliziter Angabe, also foo(12.0f) dagegen "I am a FLOAT".

In deinem Fall wirst du keine Probleme mit Funktionsüberladung haben, das dies in C nicht möglich ist, aber bei dir besteht ein Problem mit der automatischen Typenzuweisung. Dein Compiler läuft also nich Amok, sonder verhält sich wie man es von ihm erwartet.

UeB
30.04.2007, 18:54
soviel ich weiß steht das große F für ein long double

also wenn im Code steht
1.0f hat das den Typ float
und
1.0 den Typ double
und
1.0F den Typ long double

wenn du also schreibst double x = 1.0F findet wieder eine implizite Typenumwandlung von long double nach double statt daher sollte man das F hier schon besser weglassen damit die 1.0 gleich den Typ double hat.

eamC
30.04.2007, 19:13
Tatsächlich, wieder einmal etwas durcheinander gebracht.
Habe es im Originaltext verändert, nicht dass jemandem etwas Falsches hängen bleibt.