Forum: Mikrocontroller und Digitale Elektronik Double übergeben klappt nicht


von Tim (Gast)


Lesenswert?

Hallo

Ich versuche meiner Wurzel Funktion einen double zu geben.
Das sieht wie folgt aus:
1
sqrt10((height/r)*(height/r))

height ist ein int
und r ebenfalls.

Leider kommt in sqrt10() nur 0.0 an.
1
double sqrt10(double Nbr)

Ich habe auch bereits versucht die berechnung zu casten:
1
sqrt10((double)(height/r)*(double)(height/r))
1
sqrt10((double)((height/r)*(height/r)))

funktioniert leider beides nicht.

Weiss jemand rat?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Tim schrieb:
> height ist ein int
> und r ebenfalls.

Und was ist das Ergebnis der /int/-Division aus beidem?

Zufälligerweise ... 0?

: Bearbeitet durch User
von Peter II (Gast)


Lesenswert?

height ist ein int
und r ebenfalls.

int / int ist aber auch int. Woher soll da ein double kommen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Peter II schrieb:
> int / int ist aber auch int. Woher soll da ein double kommen.

Das aber macht nichts, das wird konvertiert. Aber eine int-Null ist auch 
eine double-Null.

von Peter II (Gast)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Das aber macht nichts, das wird konvertiert. Aber eine int-Null ist auch
> eine double-Null.

aber nicht wenn

height = 5
und
r = 8

ist, dann kommt halt 0 raus, bei double aber nicht.

von Mike (Gast)


Lesenswert?

Tim schrieb:
> Weiss jemand rat?

Wenn du uns vielleicht mal erzählst, was height und r bei dir für Werte 
annehmen ...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Peter II schrieb:
> aber nicht wenn
>
> height = 5
> und
> r = 8
>
> ist, dann kommt halt 0 raus, bei double aber nicht.

Nö. Das ist und bleibt eine int-Division, es sei denn, es werden beide 
Werte nach double gecastet.

Wenn aber nur das Resultat der int-Division nach double gecastet wird, 
ändert sich nichts.

Es gibt also keinerlei Unterschied zwischen
1
srqt(height / r);

und
1
srqt((double) (height / r));

Sinnvoll wird die Angelegenheit erst hier:
1
srqt(((double) height) / ((double) r));

(Potentiell überzählige Klammern zur Verdeutlichung des Ziels der 
jeweiligen Typecasts)

von Martin (Gast)


Lesenswert?

Es reicht wenn einer der beiden Operatoren gecastet wird

von Peter II (Gast)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Nö. Das ist und bleibt eine int-Division, es sei denn, es werden beide
> Werte nach double gecastet.

nein einer davor reicht schon aus.
1
srqt(double)height/r);

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Peter II schrieb:
> srqt(double)height/r);

Das ist kein gültiger Ausdruck in C-artigen Sprachen.

von Peter II (Gast)


Lesenswert?

Andreas Schweigstill schrieb:
> Peter II schrieb:
>> srqt(double)height/r);
>
> Das ist kein gültiger Ausdruck in C-artigen Sprachen.

man muss ja nicht alles vorgeben, etwas mitdenken ist immer gut.
1
srqt(double)height/r));

von Hihi (Gast)


Lesenswert?

Peter II schrieb:
> Andreas Schweigstill schrieb:
>> Peter II schrieb:
>>> srqt(double)height/r);
>>
>> Das ist kein gültiger Ausdruck in C-artigen Sprachen.
>
> man muss ja nicht alles vorgeben, etwas mitdenken ist immer gut.
> srqt(double)height/r));

Das ist kein gültiger Ausdruck in C-artigen Sprachen.

von Peter II (Gast)


Lesenswert?

Hihi schrieb:
>> man muss ja nicht alles vorgeben, etwas mitdenken ist immer gut.
>> srqt(double)height/r));
> Das ist kein gültiger Ausdruck in C-artigen Sprachen.

ok, damit ist bewiesen ich kann kein C.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Peter II schrieb:
> Hihi schrieb:
>>> man muss ja nicht alles vorgeben, etwas mitdenken ist immer gut.
>>> srqt(double)height/r));
>> Das ist kein gültiger Ausdruck in C-artigen Sprachen.
>
> ok, damit ist bewiesen ich kann kein C.

Versuch mal
1
srqt((double) height / r);

von Peter II (Gast)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Versuch mal
> srqt((double) height / r);

danke, ich hatte es schon mit

#define sqrt sqrt(

gelöst.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Peter II schrieb:
> danke, ich hatte es schon mit
>
> #define sqrt sqrt(
>
> gelöst.

Aua.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Peter II schrieb:
> int / int ist aber auch int

...oder aber die Spanische Inquisition ;-)

http://blog.regehr.org/archives/887

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.