

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.
... 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.