

C# - Double.NaN
Aké máte skúsenosti s touto konštantou?
Chcel som ju využiť, aby som nemusel robiť podmienky navyše. Jednalo sa o to, že v určitom prípade sa mal počítať acos hodnoty menšej ako -1 a dopadlo to takto:
1. Pri zobrazení premennej s výsledkom cez MessageBox.Show sa zobrazilo "nie je číslo".
2. Pri porovnaní premennej s výsledkom a konštanty Double.NaN bola podmienka nepravdivá. Nakoniec som musel program prerobiť tak, ako by bol urobený v iných programovacích jazykoch.
Také chovanie je štandardné (nezáleží od programovacieho jazyka). Na porovnanie, či je v premennej NaN, použi metódu Double.IsNaN.
To ma prekvapuje, lebo v MSDN helpe je napísaný príklad, kde sa porovnáva delenie nulou takto:
Co to je za hovadinu? Tohle snad bude true pořád, ne?
Já bych spíše čekal, že to vždy vyhodí DIV zero exception.
Omyl, v C# je riešené aj delenie nulou.
Delenie nulou je riesene aj v C(++) alebo v akomkolvek inom jazyku u double premennych, pretoze double reprezentacia (IEEEneviemkolko uz to pisal Los) umoznuje aj hodnotu +-infinite a NaN. Porovnavat to nejde ptz napr. 5.0/0.0 a 10.0/0.0 vratia sice obe NaN alebo infinite (neviem zhlavy), ale 5.0/0.0 sa nerovna 10.0/0.0 (P.S. mozno ze nekonecno ide aj porovnavat, ale NaN porovnavat nejde. NaN a nekonecno su rozne cisla/reprezentacie).
Exception je len u celociselneho delenia (resp. existuju excepiony aj u double, ale myslim ze ich nemusis chytat a program by mal normalne bezat dalej).
... pozor na to ze aj v C# mas okrem IsNaN() aj IsInfinity(), neni to to iste. Neviem zhlavy co vznika pri deleni nulou, ale infinity moze vzniknut napr. pri deleni velmi malym cislom (alebo aj pri deleni nulou a NaN vznikne len pri 0.0/0.0 - pozri si poriadne MSDN alebo vysledok testuj na obe!)
V C# je NaN. Nevedel som, že je to vyriešené v C++. Myslel som, že C# bolo prvé. Je dobré, že to pridávajú do viac a viac jazykov.
Aj v C# je definovane okrem NaN aj Infinity (nekonecno), a mozu ti tam vzniknut obe (a .IsNan() netestuje pripad ked tam je Infinity). Takze aj na to davat pozor a prip. ak je to nutne tak testovat aj IsInfinity(). Predpokladam ze infinity tam budes mat ked urobis napr. 1/0, a NaN budes mat ked urobis 0/0, ale over si to. A Infinity bude urcite vysledok operacie napr. velmi velke/velmi male cislo.
To plati len pre cele cisla. Floating-point cisla sa daju delit nulou (vysledok je nekonecno alebo NaN).
Ktorý príklad máš na mysli? Ja som našiel iba tento.
Porovnanie NaN pomocou operátora == s hocičím vráti false - tak je to definované v norme IEEE 754.
Moja chyba, nepozrel som si ten príklad poriadne.