Diskuze: Nepřesnosti datového typu double
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 4 zpráv z 4.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
K přesnosti typu double
: podívej se na to, jak počítač
reprezentuje double
a jak se pracuje s čísly s pohyblivou
řádovou čárkou (viz https://www.youtube.com/watch?… a http://floating-point-gui.de/).
Mocněním v cyklu se program moc nezpomalí. Nicméně uložit si
opakující se část výpočtu do proměnné je vždy dobrý nápad už jen
kvůli přehlednosti. Složitost záleží ještě na velikosti
pole
a implementaci pole.Contains
Pokud tahle metoda
prochází lineárně prvky pole, tak můžeš v nejhorším případě provést
řádově až délka pole * počet cyklů
operací. Jestli je
obojí (délka pole i počet cyklů) v řádů stovek, pak to nebude vadit.
Alternativní řešení nepřesnosti záleží na problému. Například
pokud počítáš jen 3. odmocniny čísel a v poli jsou jen celá čísla
(resp. jejich třetí mocnina je celé číslo), pak je do pole
stačí ukládat ve třetí mocnině. V takovém případě můžeš místo
double
použít celá čísla (místo
pole.Contains(Math.Pow(64, 1.0 / 3.0)
stačí zavolat jen
pole.Contains(64)
).
Díky za zajímavý příspěvek, na druhém odkazu je to skvěle
vysvětlené
Nakonec jsem to trochu obešel a v KSP-Z z úlohy Mocniny mám 7 z 10 (Moc se mi nechce zjišťovat,
proč jen 7.)
if (d % 1 > 0.99999 || d % 1 < 0.00001 ||d % 1 == 0)
//.....
V té úloze nemusíš vůbec používat double
, vystačíš si
s celými čísly.
Zobrazeno 4 zpráv z 4.