C++ double to int cast

(Firma: egal) #6866767
Lesenswert?

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:
1
    int x1 = (int)(4.06 * 100);
2
    int x2 = (int)(4.06 * 100.0);
3
    int x3 = (int)((double)4.06 * (double)100.0);
4
    int x4 = (int)round(4.06 * 100.0);
5

6
    printf("%d %d %d %d\n", x1, x2, x3, x4);

siehe auch:
- https://en.cppreference.com/w/cpp/numeric/math/round
Gast #6872817
Lesenswert?

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ß?
Gast #6873223
Lesenswert?

Ε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.
Gast #6873700
Lesenswert?

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 schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren