Podobné čísla – jak ho poznat

Za označení „podobné číslo“ by mi každý správný matematik nafackoval, nicméně v programování je potřeba i tuto vlastnost brát v úvahu. Zejména z toho důvodu, že při počítání může dojít k zaokrouhlení a nebo také kvůli uživatelům, kteří velké čísla vnímají jako stejné nebo podobné.

Příklad ze života: Auto A stojí 500 199 kč, auto B stojí 500 210 kč. Průměrný člověk vám řekne, že „stojí stejně“, nicméně je zde rozdíl 11 kč. V tomto případě zanedbatelný a v běžné praxi ho nijak nepocítíte (v případě nákupu). Pokud ve vaší aplikaci pracujete se vstupy čísel, jak je potřeba brát v úvahu nějakou „rezervu“, kterou může uživatel nechtěně napsat. Samozřejmě u větších čísel větší, u menších menší nebo žádnou.

Příklad první – vzorová situace

Uživatel má za úkol přepsat řadu desetinných čísel, které má vytištěné ze záložní databáze na papíru. Čísla mají obvykle 10 desetinných mís­t.

Číslo v databázi: 8.3526890000, uživatel zadá: 8.352689, což je vlastně úplně něco jiného, protože to je jinak dlouhý řetězec znaků. Je potřeba s tím počítat.

Číslo v databázi: 2.35, uživatel zadá 2.3, což je ale úplně jiné číslo – liší se o 0.05. Je potřeba s tím počítat v toleranci.

Definice rezervy – tolerance

Obvykle by tolerance měla být malá, ale přitom rozumná. K tomuto článku nemám žádné podklady, dále popisuji jen své dojmy a jak k číslům přistupuji já. Berte to maximálně jako inspiraci, určitě existují lepší metody.

Tolerance řadím podle počtu různých čísel, které se zadávají:

  • Jedno číslo – Zde je vhodná tolerance odmocnina ze zadaného čísla. Někdy dokonce 1/4 z čísla.
  • Dvě čísla – Zde používám dva možné postupy:
  • Rozdíl čísel a z toho odmocnina (menší tolerance)
  • Průměr čísel a z toho odmocnina (větší tolerance)
  • Tři a více čísel – Zde je mnoho možností:
  • Vypočítat průměr a z toho odmocninu
  • Vypočítat medián a z toho odmocninu
  • Z každého čísla vypočítat odmocninu a až pak udělat průměr nebo medián
  • Využít nějakou goniometrickou funkci
  • Seřadit čísla dle velikosti, udělat rozdíl a ten odmocnit nebo z něj udělat 1/x celku
  • Mnoho dalších podobných postupů…

Ošetření výstupů

Před testováním tolerance je potřeba počítat s několika faktory, které mohou nastat. Z mé zkušenosti to jsou tyto:

  • Záporné číslo – nikdy by neměla být tolerance záporná! Pokud by byla, tak mohou nastat dvě situace:
  • Zadané číslo bude vždy v toleranci.
  • Zadané číslo nebude nikdy v toleranci.
  • Nereálné číslo – tolerance by nikdy neměla být větší než odmocnina z chtěného čísla.
  • Absolutní hodnota – o tom jsem už v zásadě psal v prvním bodě. Je fain dát toleranci do absolutní hodnoty.
  • Uvážit vhodnost – aneb, kdy se hodí tolerovat a kdy je to nepřípustné.
  • Zaokrouhlení – při zadávání dlouhých desetinných čísel lidé rádi zaokrouhlují, nebo napíší jen část číslovky. Je potřeba s tím počítat.
  • Nula – někdy může být tolerance natolik velká, že by vyhovila i nula. S tím je potřeba počítat, protože když se odešle prázdný formulář, tak je vnímán právě jako nula – takže když uživatel nezadá nic, tak může být přesto hodnota vyhodnocena za validní. Bacha na to. Dobrým řešením je zadání nuly v toleranci úplně zakázat.

Závěr

Rezervy a tolerance jsou fain věc, ale nehodí se na všechna místa, kde uživatelé zadávají nějaké číselné hodnoty. Algoritmu to nijak nepřidá, ale pomůže to uživatelům.

Sponzorované odkazy
Pomohl Vám tento článek?