Přejít na obsah


Fotka

Znaky mimo abecedu, styl zápisu čísla


  • Pokud chcete vložit odpověď, přihlašte se
8 odpovědí na toto téma

#1 JKLD

JKLD

    Advanced Member

  • Members
  • PipPipPip
  • 146 příspěvků(y)

Publikováno 09 únor 2022 - 16:01

Dobrý den všem,

snažím se vytvořit Wherigo s převody jednotek a narazil jsem na několik problémů. Přestože jsem prošel snad všechna témata ve fóru, odpovědi se mi najít nepodařilo.

  1. Jak nechat zobrazit např. řecké písmeno [mí]? Zkoušel jsem μ, μ i μ, ale ani jedno se mi v aplikaci WhereYouGo nezobrazilo správně.
  2. Jak nechat zobrazit např. symbol ? Opět jsem zkoušel několik různých možnosti, ale WhereYouGo nefunguje, jak bych chtěl.
  3. Malá čísla nebo naopak velká čísla při převodu z malých dílčích jednotek na velké násobné jednotky (a obráceně) se mi zobrazují ve tvaru ...E..., např. "3.0E-4". Pro uživatele by byl určitě vhodnější zápis 0.0003 (i když chybí mezera a je použita desetinná tečka). Jak způsob zobrazení nechat ve stylu např. 0.0003?
  4. Čas od času se mi stane, že např. místo zadaného čísla "0.000000000063" smartphone nějak převezme číslo "6.299999999999999E-11" čímž logicky při porovnávání nahlásí chybu. Jak tomuto problému předejít?

Předem moc všem děkuji za pomoc a rady.

LD


Tento příspěvek byl upraven od JKLD: 09 únor 2022 - 16:17

  • 0

#2 mh.mail

mh.mail

    Advanced Member

  • Members
  • PipPipPip
  • 1 781 příspěvků(y)

Publikováno 11 únor 2022 - 8:42

Ad 1., 2.:

Nezobrazíš. S tím se musíš smířit. Pokud je nezbytné, aby se zobrazily nějaké symboly, pak jedině jako obrázek (tj. celý text, který jsi chtěl napsat v textu, musíš udělat jako obrázek a ten zobrazit).

 

Ad 3., 4.:

Předpokládám, že čísla zobrazuješ tak, že je převádíš na textový řetězec a ten zobrazuješ. U čísel v plovoucí řádové čárce se to prostě občas stane, počítač implicitně z důvodu úspory místa nebo zvýšení přehlednosti zobrazí výsledek v exponenciálním tvaru. Stejně tak občas dojde k chybě zaokrouhlení (viz bod 4.).

 

Co s tím?

  1. Používat vlastní rutiny pro převod čísla na textový řetězec a nespoléhat na implicitní způsoby. Ale i tento způsob má úskalí.
  2. Čísla v plovoucí řádové čárce (v zásadě všechna desetinná čísla) není vhodné porovnávat na přesnou shodu právě z důvodů zaokrouhlovacích chyb. Vždy se doporučuje porovnávat s nějakou přesností, něco jako: 
    Absolutní hodnota (První číslo - Druhé číslo) <= Přesnost

    V Lua kódu: 

    math.abs(cislo1 - cislo2) <= presnost

    Hodnotu pro přesnost si musíš stanovit podle toho, jak potřebuješ.

Holt zpracování desetinných čísel v počítačích není jednoduché a dost často je potřeba si pomoci nějak jinak.

 

Například ve tvém příkladu 4. Předpokládám, že uživatel zapíše na telefonu do vstupu "0.000000000063", to ty převedeš na číslo a porováváš. A proč to neporovnávat přímo jako textový řetězec (myslím na obou stranách, že i to, s čím porováváš, budeš mít ve formě řetězce)?

 

No, moc obecných rad ti k tomu nedám. Asi bude potřeba postupovat případ od případu a pro každý zvolit nejvhodnější řešení. Ale zrovna takovéhle úlohy pro Lua (potažmo wherigo) asi nebudou úplně nejvhodnější.


  • 1
„Normální je nepodvádět.“
http://gc.i-mh.net/ | gc@i-mh.net

#3 mpik

mpik

    Advanced Member

  • Members
  • PipPipPip
  • 8 814 příspěvků(y)

Publikováno 11 únor 2022 - 21:56

To jsem viděl i v jiných (drahých) programech. Evidenční číslo desetimístné, tak ho dali jako Decimal a ono se ukázalo na konci místo jedničky 0.999999999999 a nedalo se podle něj hledat. Rychle to spravili. Ale proč ho nedali jako textový řetězec? To mě napadlo hned. Asi měli nějaký důvod. Třídění? Pokud wherigo umí zaokrouhlovat, lze taky to číslo zkusit zaokrouhlit a pak porovnávat.


Tento příspěvek byl upraven od mpik: 11 únor 2022 - 21:57

  • 0

#4 gord

gord

    Advanced Member

  • Members
  • PipPipPip
  • 10 138 příspěvků(y)

Publikováno 12 únor 2022 - 8:45

Zaokrouhlovani nic moc neresi. Zpusob ulozeni cisel se tim nemeni (pokud nezmenis take typ cisla float na int). Desetinna cisla v plovouci radove carce jsou ulozena presne jen v pripade, ze jde o mocninu dvou (v mantise). To jsou jedina desetinna cisla, ktera lze ulozit presne.


  • 0

MHD/PID vybranych mest CR jako POI (diskuse)
GeoGet:
- Combine - automatizace opakovanych cinnosti (diskuse, dávky)

Stator - statistiky y GeoGetu (diskuse)

- Spoiler - uložení spoilerů do GPS jako POI (diskuse)

- Náhrada GJ legálními postupy

 


#5 rsc_cz

rsc_cz

    Advanced Member

  • Members
  • PipPipPip
  • 879 příspěvků(y)

Publikováno 12 únor 2022 - 10:44

Co to před porovnáním vynásobit a místo 0.000000000063 porovnávat 63 nebo 630?

 

Na druhou stranu - zadávat při hraní wiga takovéhle hodnoty bude vyloženě vopruz. Zvlášť jestli se k nim bude potřeba napřed dopočítat. Přijde mi to uživatelsky velmi... nepohodlné...


  • 0

#6 None

None

    Advanced Member

  • Members
  • PipPipPip
  • 1 288 příspěvků(y)

Publikováno 12 únor 2022 - 11:05

Už jsem pár wig napsal. Z praxe lze říci, že požadavky na hráče nesmějí převyšovat řekněme první obecnou a i tak sem tam dojde k problémům. Bohužel někteří hráči si v současné době neumějí ani správně nastavit telefon ke hře a při prvním problémku bombardují ownera, že to podělal a ať to opraví. Tady je mi JKLD docela líto, stráví spoustu času psaním kódu a řešením problémů, pak to najde pět kačerů a bude to na finálkách.


  • 0

#7 Vláček

Vláček

    Advanced Member

  • Members
  • PipPipPip
  • 1 787 příspěvků(y)

Publikováno 12 únor 2022 - 11:35

Co to před porovnáním vynásobit a místo 0.000000000063 porovnávat 63 nebo 630?

Jestli to budeš porovnávat v reálných číslech, tak si vůbec nepomůžeš. Postup popsaný mh.mailem je standardní a není důvod vymýšlet něco jiného.


  • 1

#8 ubuster

ubuster

    ubuster

  • Members
  • PipPipPip
  • 588 příspěvků(y)

Publikováno 12 únor 2022 - 19:48

Bohužel v operačních systémech obecně není numeric 1/1 = 1. Jde to demonstrovat i v obyčejném Excelu. A od toho se vše odvíjí. Používat jedině metodu "přesnosti".
  • 0

HW: Motorola One Action _ Garmin eTrex Legend HCx

SW: c:geo _ WhereYouGo _ GDAK _ GCC _ Go(x)°


#9 JKLD

JKLD

    Advanced Member

  • Members
  • PipPipPip
  • 146 příspěvků(y)

Publikováno 13 únor 2022 - 9:41

Dobrý den,

děkuji všem za rady.

1. ... řecké písmeno μ nahradím [mí]

2. ... symbol ≠ nahradím textem (není, nerovná se, ...)

3. a 4. ... omezím čísla tak, aby tak velká (malá) čísla nevycházela.

WIGo bylo zamýšleno jako zpestření výuky pro 6. ročník, kde se probírají převody jednotek. A ono, když padne náhodný převod z Giga na např. mikro, tak těch nul je moc. Zkrátka nastavím program tak, aby tak velké převody nenastaly.

Díky moc všem.

LD


  • 0




2 uživatel(ů) prochází toto téma

0 uživatelů, 2 návštěvníků 0 anonymních uživatelů

Reklama