» »

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
366712 (4845) Looooooka
»

Internet - Hrvaška - kartica za 7 dni

Oddelek: Omrežja in internet
83322 (2966) Daniel
»

Največji otok v jadranskem morju?

Oddelek: Loža
365686 (4953) Okapi
»

Uspešna faktorizacija RSA-200 in RSA-640

Oddelek: Novice / Znanost in tehnologija
174415 (3580) CaqKa
»

c++ preverjanje stevil

Oddelek: Programiranje
111791 (1586) ]Fusion[

Več podobnih tem