Autor Zpráva
ellhonza
Profil
Funkci na výpočet dělení dvou čísel, výsledek zaloguje, výsledek bude vždy číslo, tj. Ošetřit dělení nulou

Moderátor Chamurappi: Titulek „Js . pomoc s příkladem“ nevystihoval podstatu dotazu. Příště zkus prosím vymyslet lepší.
Joker
Profil
To je další domácí úkol?
Nebo nějaká písemka?
Chamurappi
Profil
Reaguji na ellhonzu:
výsledek bude vždy číslo, tj. Ošetřit dělení nulou
Co se myslí číslem? Infinity je také číslo. A programátorsky vzato NaN také…

Úkoly si řeš sám, tento je příliš triviální na to, aby ti s ním někdo pomáhal (= vyřešil ho).
Joker
Profil
Chamurappi:
A programátorsky vzato NaN také…
Legrační, že NaN znamená „not a number“ a (typem) je to Number :-)

Ale pokud se nepočítá Infinity a NaN jako čísla, zajímalo by mě, jak vyrobit funkci, která vydělí dvě čísla a zajistí, že výsledek bude vždy číslo :)
Ačkoliv…
function deleni(jedno, druhe) {
  vysledek = (druhe == 0) ? druhe/jedno : jedno/druhe;
  if (!vysledek && (vysledek !== 0)) vysledek = 4; // http://xkcd.com/221/
  return vysledek;
}
Chamurappi
Profil
Reaguji na Jokera:
Hm, to je fakt, že to zadání je poněkud paradoxní :-)

Jinak tedy standardní globální funkce isFinite vrací true pouze pro konečná čísla, která nejsou NaN. Zajímalo by mě, jestli se o ní ellhonza učil, tzn. jestli o ní vůbec jeho učitel ví (já se s ní seznámil teprve, když jsem o ní chtěl psát).
1Pupik1989
Profil
Já bych to asi zapsal stylem:
function deleni(jedno,druhe){
  return (jedno === 0 || druhe === 0) ? 0 : jedno/druhe;
}

0 je jediná hodnota, která při dělení nemůže vyjít. Čili by se to dalo indikovat jako chybný stav.


Joker:
Zajímavé, takže třeba 0/2 je kolik?
Pravda, beru zpět.

Chamurappi:
Asi nemá příliš smysl hledat nějaký lepší indikátor chybového stavu než NaN.

S tím nesouhlasím. Klidně bych zůstal u Infinity. Třeba 2/0 bude pořád číslo (nekonečno).
Chamurappi
Profil
Reaguji na 1Pupika1989:
Při dělení nuly něčím nenulovým vychází nula a není to chybný stav.
Joker
Profil
Chamurappi:
Já zase až teď zjistil, že nově (ještě ne ve všech prohlížečích) existuje i metoda Number.isFinite, která se chová jinak, než globální isFinite.

Ale jinak konverze na bool s vyhozením nuly mi přijde taková univerzální metoda pro lidi kteří programují ve více jazycích.

1Pupik1989:
0 je jediná hodnota, která při dělení nemůže vyjít. Čili by se to dalo indikovat jako chybný stav.
Zajímavé, takže třeba 0/2 je kolik?

Jinak teoreticky kdyby ta funkce měla opravdu vracet podíl těch čísel (snad nemusím říkat, že to v [#4] je v praxi nepoužitelná legrácka) a zároveň vždycky vracet jen číslo, asi bych jako indikátor chybového stavu zvolil Number.MAX_VALUE nebo tak něco.

Zatímco 0 je možný výsledek normálního výpočtu, prakticky žádné dělení jehož výsledkem by bylo Number.MAX_VALUE v JS nemá smysl.
Chamurappi
Profil
Reaguji na Jokera:
existuje i metoda Number.isFinite, která se chová jinak, než globální isFinite
O ní už vím déle, ale moc jsem nepochopil, proč vůbec vznikla. Hraní na striktní typy má smysl pouze tam, kde typ neznám, přesto ho prosazují lidé, kteří se snaží typy svých proměnných důsledně znát.

prakticky žádné dělení jehož výsledkem by bylo Number.MAX_VALUE v JS nemá smysl
Až na Number.MAX_VALUE / 1. Nebo půlka Number.MAX_VALUE vydělená číslem 0.5.

Asi nemá příliš smysl hledat nějaký lepší indikátor chybového stavu než NaN. Jestli ho zadání zakazuje, je to hloupé zadání.
_es
Profil
1Pupik1989 [#6]:
To funkcia to zase komplikuje tým, že môže vrátiť aj hodnotu undefined.

Třeba 2/0 bude pořád číslo (nekonečno).
To nie je matematicky také isté. Limita pre výraz 2/n pre n blížiace sa k nule zľava je -∞, pre n blížiace sa k nule sprava je .
Joker
Profil
Chamurappi:
Až na Number.MAX_VALUE / 1. Nebo půlka Number.MAX_VALUE vydělená číslem 0.5.
Tou větou jsem myslel právě to, že smysluplnost dělení které by dalo tak vysoký výsledek je sporná.
Respektive (vzhledem k tomu, že Number.MAX_VALUE je řádově 10^308) výpočty s čísly, která zahazují nějakých 290 řádů kvůli ztrátě přesnosti.

Asi nemá příliš smysl hledat nějaký lepší indikátor chybového stavu než NaN. Jestli ho zadání zakazuje, je to hloupé zadání.
Beru to spíš jako takové zábavné „co by, kdyby“ scénáře.
(I proto ta moje první funkce zadání sice tak nějak odpovídá, ale jinak by i začátečníkovi snad mělo být zřejmé, že reálně moc smysl nemá.)

Kdybychom se bavili o reálném programování, asi nemá smysl takovou funkci vůbec psát.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: