» »

C# aritmetične operacije

C# aritmetične operacije

lambda ::

Ok, ravnokar sem naletel na eno smešno zadevo, ko neke konverzije enot niso delovale tako kot bi morale, včasih se je pojavil en kup decimalk zadaj, čeprav se ne bi smel. VS2008, dodam breakpoint, vržem zadevo kar v "watch" in mi izpljune tole:

13.635/0.001 --> 13635.0

Tole je ok, ampak tole:

13.636/0.001 --> 13635.999999999998 ?!?
13.636*1000 --> 13636.0
13.636*(1/0.001) --> 13636.0

Type Approximate range Precision .NET Framework type
double ±5.0 × 10−324 to ±1.7 × 10308 15-16 digits System.Double

Zna kdo pojasnit vse tole?

BlueRunner ::

Če želiš natančnost, uporabljaj tip Decimal. Float in Double sta samo približka podložna zaokroževanju in akumulaciji napak. 13635.999999999998 pa je pač rezultat, ki JE PRAVILEN z natančnostjo na tistih deklariranih 16 decimalk.

Zgodovina sprememb…

Mavrik ::

Števila s float/double zapisu se v računalnikih zapisujejo v IEEE 754 formatu, ki nekaterih števil ne zna čist točno prikazati. Prav tako prihaja pri računanju do zaokroževanja.

Uporabljaj (počasne) namenske tipe če rabiš natančnost.
The truth is rarely pure and never simple.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

float vs decimal

Oddelek: Programiranje
366259 (4392) Looooooka
»

Internet - Hrvaška - kartica za 7 dni

Oddelek: Omrežja in internet
83141 (2785) Daniel
»

Največji otok v jadranskem morju?

Oddelek: Loža
365526 (4793) Okapi
»

Uspešna faktorizacija RSA-200 in RSA-640

Oddelek: Novice / Znanost in tehnologija
174212 (3377) CaqKa
»

c++ preverjanje stevil

Oddelek: Programiranje
111684 (1479) ]Fusion[

Več podobnih tem