XBUP - Knihovna UBNumberTento dokument je součástí dokumentace projektu eXtensible Binary Universal Protocol. Obsahuje popis implementací podpory, především knihoven, nástrojů a demonstračních aplikací.
1. Úvod
2. Vlastní třídy knihovny UBNumber
2.1. Třída UBNumber
2.2. Třída UBNatural
2.3. Třída UBInteger
2.4. Třída UBReal
2.5. Třída UBRatio
2.6. Třída UBENatural
2.7. Třída UBEInteger
2.8. Třída UBEReal
3. Demonstrační programy
3.1. Demo program
3.2. Jednoduchá kalkulačka
Knihovna UBNumber implementuje podporu neomezeně velkých čísel s konečnou reprezentací, především s ohledem na konverzi do a z binárního/datového proudu.
Níže popsaná varianta knihovny je naprogramována v programovacím prostředí Borland Delphi. V tomto jazyce se autorovi nepodařilo nalézt žádnou jinou knihovnu podporující tak velké čísla, a proto se rozhodl implementovat tuto podporu sám. Primárním cílem je však funkčnost a nikoli výkon. Proto je tato knihovna neoptimalizovaná.
Vlastní třídy implementují vlastní funkcionalitu jednotky. Rodičovskou třídou je UBNumber a další třídy jsou jejími potomky. K dispozici by dále měly být další třídy pro realizaci nekonečného proudu, seznamu, ...
Toto je rodičovská třída všech tříd reprezentujících hodnoty v unárně-binárním kódování. Implementuje pouze funkce LoadFromStream a SaveToStream, které umožňují ukládání do datového proudu.
LoadFromStreamPřečte a zahodí právě jednu hodnotu z proudu.
SaveToStreamUloží do proudu hodnotu 0.
Tato třída implementuje neomezeně velké celé kladné - nezáporné číslo.
Inc - Zvýší hodnotu o 1
Dec - Sníží hodnotu o 1. Při podtečení dojde k vyjímce EUBNumUnderFlow.
Add(A) - Přičte A.
Sub(A) - Odečte A. Pokud je výsledek záporný dojde k vyjímce EUBNumUnderFlow.
Multiply(A) - Vynásobí se A.
Power(A) - Umocní se na A.
DivRest(A, B) - Vydělí se A a vrátí se B jako zbytek při dělení. Při dělení 0 dojde k vyjímce EUBNumEDivByZero.
Divide(A) - Vydělí se A. Při dělení 0 dojde k vyjímce EUBNumEDivByZero.
Modulate(A) - Provede modulo A. Při modulo 0 dojde k vyjímce EUBNumEDivByZero.
Sqrt - Provede celočíselné odmocnění.
ShiftLeft(A) - Posune doleva o A bitů.
ShiftRight(A) - Posune doprava o A bitů.
DoOr(A) - Provede logický součet s A.
DoAnd(A) - Provede logický součin s A.
DoXor(A) - Provede logický exkluzivní součin s A.
DoNot(A) - Neguje A bitů.
IsZero - Vrátí logickou pravdu, pokud je hodnota 0.
IsEqual(A) - Vrátí logickou pravdu, pokud je hodnota rovna A.
IsGreater(A) - Vrátí logickou pravdu, pokud je hodnota větší než A.
IsShort - Vrátí logickou pravdu, pokud je hodnota menší než High(UBBase).
LoadFromStream - Načte hodnotu z datového proudu.
SaveToStream - Uloží hodnotu do datového proudu.
GetString - Vrátí hodnotu čísla převedenou na řetězec.
SetString(A) - Získá z řetězce hodnotu. V případě chyby při převodu dojde k vyjímce EUBConvertError.
GetHexString - Vrátí hodnotu v řetězci v hexadecimálním tvaru.
SetHexString(A) - Získá z řetězce hodnotu. V případě chyby při převodu dojde k vyjímce EUBConvertError.
GetShort - Přečti hodnotu do základního typu jazyka. Pokud je hodnota příliš velká dojde k vyjímce EUBNumOverFlow.
SetShort(A) - Nastav hodnotu ze základního typu jazyka.
SetValue(A) - Získá hodnotu z hodnoty objektu A.
GetValue(A) - Do objektu A nastaví stejnou hodnotu.
Tato třída implementuje neomezeně velké celé číslo. Obsahuje všechny výše uvedené metody třídy UBNatural a navíc tyto další:
IsNeg - Vrátí logickou pravdu, pokud je číslo záporné.
Abs - Převede hodnotu na absolutní (vynuluje znaménko).
Neg - Převede hodnotu na opačnou (zneguje znaménko).
V třídě jsou dostupné proměnné Value typu UBNatural a Sign> typu logická hodnota, pomocí nichž je třída UBInteger implementována.
Tato třída implementuje neomezeně velké reálné číslo s konečným desetinným/dvojkovým rozvojem. Číslo je reprezentováno dvěma hodnotami UBInteger pojmenovanými Base a Mantis. Třída obsahuje všechny výše uvedené metody třídy UBInteger a navíc tyto další:
Trunc - Vynuluje část za desetinnou tečkou.
Frac - Vynuluje část před desetinnou tečkou.
Sin - Trigonometrická funkce Sinus.
Cos - Trigonometrická funkce Cosinus.
Tan - Trigonometrická funkce Tangens.
Tato třída implementuje neomezeně přesnou hodnotu s konečným dvojkovým rozvojem v pevném intervalu <0,1>. Na rozdíl od UBReal tak ke kódování této hodnoty stačí jedna hodnota typu UBNatural.
Demonstrační programy umožňují vyzkoušení knihovny a testování jednotlivých funkcí.
Tento demonstrační program umožňuje testování metod jednotlivých tříd. Obsahuje záložky pro všechny testované třídy, přičemž v každé záložce jsou dvě vstupní a jedna výstupní oblast, ve které je možné zadávat/číst hodnoty v dekadickém a hexadecimálním tvaru. Kromě toho obsahuje oblast tlačítek provádějících jednotlivé operace. Vstupy těchto funkcí jsou brány z dekadického tvaru, proto je nutné před každým voláním provést převod.
Vzhled aplikace

Dalším ukázkovým programem je jednoduchá kalkulačka počítající v číselném formátu XBReal.
Homepage: http://xbup.sf.net
License: GNU Free Documentation License (FDL)
Latest update: 2007-01-15