Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
Rozdział2:Zmienne,operatoryiwyrażenia
57
Należyrównieżmiećświadomość,żetypdanychrezultatudziałaniaoperatora
arytmetycznegozależnyjestodtypudanychużytychargumentówtegooperatora.
Przykładowo,wartościąwyrażenia5.0/2.0jest2.5;obydwaargumentywtymprzy-
padkutypudouble,awięcrezultatrównieżjesttypudouble.(WjęzykuC#literały
liczbowe,wktórychwystępujekropka*zawszetypudouble,aniefloat,copozwala
zachowaćmaksymalnąmożliwądokładność).Jednakżewartościąwyrażenia5/2jest2.
Wtymprzypadkuobydwaargumentytypuint,awięcrezultatrównieżjesttypu
int.Wtakichsytuacjachjakta,językC#zawszezaokrąglawartościwdół(aściślej
mówiączaokrąglaczęśćwdółwartośćbezwzględnąrezultatu).Sytuacjastajesięnieco
bardziejzłożona,jeśliużywamyargumentówróżnychtypów.Przykładowo,wyrażenie
5/2.0zawierakombinacjętypówintidouble.Kompilatorwykryjetakieniedopasowanie
typówiprzedwykonaniemoperacjiniejawnieprzekształciwartośćtypuintdotypu
double.Wynikiemtejoperacjibędziewięcwartośćtypudouble(2.5).Wprawdziemie-
szanietypówdanychwjednymwyrażeniuniejestbłędem,alejestuznawanezazłą
praktykęwprogramowaniu.
Numerycznetypydanychawartościnieskończone
WjęzykuC#istniejątakżeinnecechyliczb,októrychnależywiedzieć.
Przykładowo,rezultatemdzieleniadowolnejliczbyprzezzerojestnieskończo-
ność,czyliwartośćwykraczającapozazakrestypówdanychint,longlubdeci-
mal;wkonsekwencjipróbawyznaczeniawartościwyrażeniatakiegojaknp.5/0
zakończysiębłędem.Typydoubleifloatoferująjednakspecjalnąwartość,która
możereprezentowaćnieskończonośćiwartościąwyrażenia5.0/0.0jestInfnity
(nieskończoność).Wyjątkiemodtejregułyjestwartośćwyrażenia0.0/0.0.
Zwyklewynikiemdzieleniazeraprzezdowolnąliczbęjestzero,awynikiem
dzieleniadowolnejliczbyprzezzerojestnieskończoność.Wyrażenie0.0/0.0
prowadziwięcdoparadoksujegowartościąmusibyćjednocześniezeroinie-
skończoność.WjęzykuC#istniejejeszczejednaspecjalnawartośćprzewidziana
właśnienasytuacjęjesttotakzwanawartośćNaN,cooznaczaskrótodsłów
„notanumber”(toniejestliczba).Takwięcwartościąwyrażenia0.0/0.0jest
wartośćNaN.
WartościNaNiInfnityużytejakoargumentywyrażeniaulegająpropagacji
nawyniktegowyrażenia.Wartościąwyrażenia10+NaNjestwartośćNaN,
awartościąwyrażenia10+InfnityjestwartośćInfnity.Wartościąwyrażenia
Infnity*0jestwartośćNaN.
*Wewszystkichjęzykachprogramowania,podobniejakwjęzykuangielskim,częśćdziesiętnąliczb
odczęścicałkowitejoddzielasięznakiemkropki,anieprzecinka.