Gast
#6866689
Hallo C/C++ Freunde, warum ergibt
1 | |
405 ? Wie komme ich auf das richtige Ergebnis 406? Werner
|
Anzeige
|
C++ double to int cast
Gast
#6866689
Hallo C/C++ Freunde, warum ergibt
405 ? Wie komme ich auf das richtige Ergebnis 406? Werner
Gast
#6866691
Wahrscheinlich weil 4.06 in Wahrheit 4.05irgendwas ist. Was ergibt denn 4.06*10000 im Integer-Cast?
Gast
#6866703
Mit Faktor 1000: 4059, Faktor 10000: 40599, Faktor 100000: 405999
Gast
#6866710
Ist zwar nur float, aber: 4.06 ist 4.059999942779541015625. Ich mag die Seite ganz gern: https://www.h-schmidt.net/FloatConverter/IEEE754de.html (int) (4.06 * 100 + 0.01)
Gast
#6866721
(int) (4.06 * 100 + 0.005) float schrieb: > Ist zwar nur float, aber: 4.06 ist 4.059999942779541015625. Das ist genau so einer dieser Werte wo das einfache abschneiden der Nachkommastellen nicht zum Ziel führt. Zum ausprobieren:
siehe auch: - https://en.cppreference.com/w/cpp/numeric/math/round
Gast
#6866788
Wenn so die Anforderungen sind, sollte man besser mit Festkommazahlen arbeiten. Oder eben immer korrekt runden, bevor ge-castet wird, so wie es schon von Paul beschrieben wurde.
Gast
#6866827
> (int) (4.06 * 100 + 0.01) > (int) (4.06 * 100 + 0.005) Wohl eher: (int)(4.06 * 100 + 0.5)
Gast
#6866847
> (int) (4.06 * 100 + 0.01) > (int) (4.06 * 100 + 0.005) > (int)(4.06 * 100 + 0.5) Leute das Ding heisst: int x = lround(4.06*100); Öfters mal in die Referenz schauen: https://en.cppreference.com/w/c/numeric/math/round
Gast
#6866987
foobar schrieb: >> (int) (4.06 * 100 + 0.01) >> (int) (4.06 * 100 + 0.005) > > Wohl eher: > (int)(4.06 * 100 + 0.5) Korrekt auf eine ganze Zahl gerundet, aber leider nur für positive Zahlen.
Gast
#6867924
Justin S. schrieb: > Korrekt auf eine ganze Zahl gerundet, aber leider nur für positive > Zahlen. Es gibt nicht die eine korrekte Art zu Runden. float schrieb: > Ist zwar nur float, aber: 4.06 ist 4.059999942779541015625. Als double ist es 4.0599999999999996092014953319448977708816528320312500 Die nächstgrößere als double darstellbare Zahl ist 4.0600000000000004973799150320701301097869873046875000 Die erste von beiden ist aber die bessere Näherung. Yalu X. schrieb: > ls double ist es > > 4.0599999999999996092014953319448977708816528320312500 > > Die nächstgrößere als double darstellbare Zahl ist > > 4.0600000000000004973799150320701301097869873046875000 Da sieht man, dass die + 0.01 noch viel zu groß sind.
Gast
#6872817
Dirk B. schrieb: > Yalu X. schrieb: >> ls double ist es >> >> 4.0599999999999996092014953319448977708816528320312500 >> >> Die nächstgrößere als double darstellbare Zahl ist >> >> 4.0600000000000004973799150320701301097869873046875000 > > Da sieht man, dass die + 0.01 noch viel zu groß sind. Für was ist 0.01 zu groß? mh schrieb: > Für was ist 0.01 zu groß? er sucht vmtl. std::numeric_limits<double>::epsilon Allerdings muss das noch entsprechend hochskaliert werden.
Gast
#6873215
Εrnst B. schrieb: > mh schrieb: >> Für was ist 0.01 zu groß? > > er sucht vmtl. > std::numeric_limits<double>::epsilon > Allerdings muss das noch entsprechend hochskaliert werden. Und wofür will er das vermutlich gesuchte epsilon verwenden? mh schrieb: > Und wofür will er das vermutlich gesuchte epsilon verwenden? um die kleinste Zahl zu finden, die er zu 4.0599999999999996092014953319448977708816528320312500 dazuaddieren muss, um auf "4.06" zu kommen.
Gast
#6873223
Εrnst B. schrieb: > mh schrieb: >> Und wofür will er das vermutlich gesuchte epsilon verwenden? > > um die kleinste Zahl zu finden, die er zu > 4.0599999999999996092014953319448977708816528320312500 > dazuaddieren muss, um > auf "4.06" zu kommen. Welches praktische Problem löst das? Ok, es ist eine Antwort auf die Frage des TO, wenn auch wenig hilfreich. mh schrieb: > Εrnst B. schrieb: >> er sucht vmtl. >> std::numeric_limits<double>::epsilon > Und wofür will er das vermutlich gesuchte epsilon verwenden? Um es mit Null zu vergleichen? Mathemathikerwitz: Sei epsilon gleich Null ...
Gast
#6873700
Axel S. schrieb: > mh schrieb: >> Εrnst B. schrieb: > >>> er sucht vmtl. >>> std::numeric_limits<double>::epsilon > >> Und wofür will er das vermutlich gesuchte epsilon verwenden? > > Um es mit Null zu vergleichen? > > Mathemathikerwitz: Sei epsilon gleich Null ... Haha ... witzig ... Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|