Byl vydán Debian 13.3, tj. třetí opravná verze Debianu 13 s kódovým názvem Trixie a Debian 12.13, tj. třináctá opravná verze Debianu 12 s kódovým názvem Bookworm. Řešeny jsou především bezpečnostní problémy, ale také několik vážných chyb. Instalační média Debianu 13 a Debianu 12 lze samozřejmě nadále k instalaci používat. Po instalaci stačí systém aktualizovat.
Na stránkách Evropské komise, na portálu Podělte se o svůj názor, se lze do 3. února podělit o názor k iniciativě Evropské otevřené digitální ekosystémy řešící přístup EU k otevřenému softwaru.
Společnost Kagi stojící za stejnojmenným placeným vyhledávačem vydala (𝕏) alfa verzi linuxové verze (flatpak) svého proprietárního webového prohlížeče Orion.
Firma Bose se po tlaku uživatelů rozhodla, že otevře API svých chytrých reproduktorů SoundTouch, což umožní pokračovat v jejich používání i po plánovaném ukončení podpory v letošním roce. Pro ovládání také bude stále možné využívat oficiální aplikaci, ale už pouze lokálně bez cloudových služeb. Dokumentace API dostupná zde (soubor PDF).
Jiří Eischmann se v příspěvku na svém blogu rozepsal o open source AdGuard Home jako domácí ochraně nejen před reklamou. Adguard Home není plnohodnotným DNS resolverem, funguje jako DNS forwarder s možností filtrování. To znamená, že když přijme DNS dotaz, sám na něj neodpoví, ale přepošle ho na vybraný DNS server a odpovědi zpracovává a filtruje dle nastavených pravidel a následně posílá zpět klientům. Dá se tedy používat k blokování reklamy a škodlivých stránek a k rodičovské kontrole na úrovni DNS.
AI Claude Code od Anthropicu lépe rozumí frameworku Nette, tj. open source frameworku pro tvorbu webových aplikací v PHP. David Grudl napsal plugin Nette pro Claude Code.
Byla vydána prosincová aktualizace aneb nová verze 1.108 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.108 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.
Na lasvegaském veletrhu elektroniky CES byl předveden prototyp notebooku chlazeného pomocí plazmových aktuátorů (DBD). Ačkoliv se nejedná o první nápad svého druhu, nepochybně to je první ukázka praktického použití tohoto způsobu chlazení v běžné elektronice. Co činí plazmové chladící akční členy technologickou výzvou je především vysoká produkce jedovatého ozonu, tu se prý podařilo firmě YPlasma zredukovat dielektrickou
… více »Patchouli je open source implementace EMR grafického tabletu (polohovací zařízení). Projekt je hostován na GitLabu.
Český Nejvyšší soud potvrdil, že česká právní úprava plošného uchování dat o elektronické komunikaci porušuje právo Evropské unie. Pravomocným rozsudkem zamítl dovolání ministerstva průmyslu a obchodu. To se teď musí omluvit novináři Českého rozhlasu Janu Cibulkovi za zásah do práv na ochranu soukromí a osobních údajů. Ve sporu jde o povinnost provozovatelů sítí uchovávat údaje, ze kterých lze odvodit, kdo, s kým a odkud komunikoval.
Céčkom som sa nikdy nezaoberal a tým pádom viem o ňom naozaj len málo. No vážne som netušil, že nezvláda ani jednoduché porovnanie dvoch čísel!
Kamarát sa mi stažoval, že sa mu nedajú porovnať dve desatinné čísla v Céčku. Neveril som kým som si nenapísal vlastný kód:
priklad.c:
#include <stdio.h>
int main() {
double Fg, Fy, g;
int m;
g=9.81;
m=10;
Fg=g*m;
Fy=98.1;
printf("Fg = %f\nFy = %f\n", Fg, Fy);
if (Fg==Fy) {
printf("OK\n");
}
else {
printf("FUCK\n");
}
return 0;
}
Preložil som si ho pomocou gcc priklad.c a spustil - "./a.out". Samozrejme som bol prekvapený už len z toho, že sa mi to skompilovalo, keďže moje skúsenosti s Céčkom skončili pri Hello World.. :) Ale nanešťastie mi môj program zanadával, čo by sa nemalo stať, keďže tie dve premenné sa rovnajú!
Preto by som sa vás chcel spýtať, kde je chyba..? Ja ju teda naozaj nevidím.. :(
Tiskni
Sdílej:
Fg=g*(double)m; nebo by muselo být m typu double.
if (fabs(Fg - Fy) < 0.01) {
Nemůžeš testovat rovnost dvou čísel s plovoucí desetinou čárkou. A to v žádném jazyce.Přesně tak. Někdy není dobré věřit tomu, co člověk vidí, ať už v debuggeru, editoru nebo na výstupu. Stejný problém se mnou kdysi "zacvičil" v Delphi a Interbase/Firebirdu. Čísla vypadala, že mají 2 des. místa, ale v reálu tam byl ještě drobek v x-tém řádu.
). A plati to i pro jazyky, ktere jsou jen slabe typove, nebo typy nepouzivaji vubec.
Minimalne by mel kazdy, kdo programuje, vedet, ze u cisel v plovouci radove carce existuje jen omezena presnost, pri scitani moc rozdilnych cisel mohou podtect, nelze je porovnavat klasickym zpusobem, ale pouze pomoci absolutni hodnoty rozdilu a nastavene presnosti, a ze pro operace nad temito cisly neplati za urcitych okolnosti asociativia a komutativnost, tj. ze nemusi platit napr. (a/b)*c=(a*c)/b.
Jinak operace s reálnými čísly na počítači komutativní jsou, ale nejsou asociativní.
Jinak operace s reálnými čísly na počítači komutativní jsou, ale nejsou asociativní.Za urcitych okonlosti nejsou ani komutativni - pokud se nepocita v plne presnoti, dochazi k chybam v dusledku konverze pri nacitani a ukladani dat z/do koprocesoru. Presneji je to popsano treba na Wikipedii, u popisu rozdilu klasickeho FPU a SSE2. Pak zalezi, jakym zpusobem je vzorec zpracovan a poradi promenych muze ovlivnit presnost vysledku. Prakticky je ale pravdepodobnost neceho takoveho v bezne praxi velmi mala, ale je dobre to vedet.
Nicméně toto je celkem známý problém. Počítače počítají ve dvojkové soustavě a ne v desítkové. Když ti dám spočítat, kolik je deset děleno třema, nikdy mi v desítkové soustavě nenapíšeš přesný výsledek. Stejně tak těžké je pro počítač popsat jednu desetinu. Někde se prostě musí zaokrouhlit, tím vznikne chyba, a když tu chybu zdesetinásobíš, bude to už docela velká chyba, která způsobí nerovnost těch čísel. Řešením je tolerovat drobné chyby, použít zlomky, použít matematickou knihovnu s neomezenou přesností nebo tak něco
V Moskovskom gosudarstvennom universitětě postrojili trojíčnuju sčotnuju mašínu Saturn.Některé nástroje jsou na některé úlohy vhodnější než jiné. (typo 3=4 nechme stranou)
A pak třeba si zapnout FPU výjimky a hrát si s nimi a chytat je, nastavit si přesnost v FPU jednotce, způsob zaokrouhlování.
A nebo porovnávat reálná čísla jako integery - to jde, protože formát reálných čísel podle IEEE 754 normy to umožňuje - a dá to správný výsledek.
Zkrátka reálná čísla jsou pro většinu lidí pole neprobádané, kde je tolik skrytých věcí pro většinu populace až to hezké není.
Je jasné, že zase ne všechna existující matematická reálná čísla lze vůbec v počítači reprezentovat - ale tady je zase úplně jedno, jestli jde o pevnou, nebo plovoucí řádovou čárku, nebo třeba logaritmickou, či jinou reprezentaci v počítači, to platí pro všechno. Neexistuje možnost mít na počítači taková čísla, aby vyjádřila celý matematický pojem reálného čísla. Nejde to.Presneji receno, mnozina reprezentovatelnych cisel v pocitaci ma vzdy mohutnost (kardinalitu) pouze mnoziny celych cisel (napr. kazde cislo muzete pretypovat ci prevest na nejaky celociselny typ), ktera je nekonecna (v pocitaci jen teoreticky), ale spocetna (kazdemu prvku muzete priradit pritozene cislo, treba diagonalizaci). Ale mnozina realnych cisel ma vyssi mohutnost, protoze je nejen nekonecna, ale i nespocetna, tj. mezi kazda dve cela nebo racionalni cisla muzete umistit nekonecne mnoho cisel iracionalnich. Zjednodusene receno: mnozina cisel reprezentovatelnych na pocitaci je sice (teoreticky) nekonecna, ale je nekonecnekrat mensi nez mnozina realnych cisel. Ale moc nad tim nedumejte, nebo se z toho zblaznite jako chudak Cantor. Prakticky se pomoci plovouci radove carky daji presne reprezentovat jen cela cisla do velikosti mantisy a jejich nasobky vynasobene 2 na rosah exponentu. Cokoliv jineho uz muze byt nepresne. U necelych cisel jsou presna jen ta, ktera jdou prevest na racionalni cislo, jehoz delitel je mocnina dvou. Cokoliv jineho dava nekonecny binarni rozvoj a je tudiz nepresne. Pokud budete pouzivat bignums, kde jsou cisla reprezenovana racionalnimy cisly (delenec/delitel), tak muzete presne reprezentovat tak velka racionalni cisla, na ktera vam staci pamet. Ale jakekoliv iracionalni cislo (Pi, e, odmocniny atd.) je mozne reprezentovat jen a pouze jako aproximaci s konecou presnosti.
Jinak souhlas.
Ale mnozina realnych cisel ma vyssi mohutnost, protoze je nejen nekonecna, ale i nespocetna, tj. mezi kazda dve cela nebo racionalni cisla muzete umistit nekonecne mnoho cisel iracionalnich.Mezi libovolnými dvěma racionálními čísly najdete taky nekonečně mnoho racionálních čísel. To ale neznamená, že by množina racionálních čísel byla nespočetná. (Ne)spočetnost je definována podle (ne)existence bijekce na množinu přirozených čísel.
resneji receno, mnozina reprezentovatelnych cisel v pocitaci ma vzdy mohutnost (kardinalitu) pouze mnoziny celych cisel (napr. kazde cislo muzete pretypovat ci prevest na nejaky celociselny typ), ktera je nekonecna (v pocitaci jen teoreticky), ale spocetna (kazdemu prvku muzete priradit pritozene cislo, treba diagonalizaci). Ale mnozina realnych cisel ma vyssi mohutnost, protoze je nejen nekonecna, ale i nespocetnaCoz je sice pravda, ale je to v tomto kontextu irelevantni. Lowenheim-skolemova veta nam totiz zarucuje, ze existuje spocetna podmnozina realnych cisel, ktera obsahuje vsechna 'zajimava' realna cisla. A tedy staci reprezentovat tuto spocetnou podmnozinu. Nicmene algoritmy pracujici nad takovou podmnozinou stejne nejspis nedobehnou v rozumnem case ...
A jako další pokud navrhuji spočítat kolik je nula děleno nulou - to totiž v reálných číslech jde.Zdroj by nebyl?
Tedy někdy.
Ale jinak jak vidíte, počítače zvládají bravurně věci, se kterými má matematika problémy
Spíš já špatně pochopil tvůj komentář.
Ale to už je fuk. Hlavně, že jsme si to vyjasnili :)
"keďže tie dve premenné sa rovnajú!"Opravdu? Doporučil bych změnit ten printf na tenhle:
printf("Fg = %f\nFy = %f\n, Fg - Fy = %0.30f\n", Fg, Fy, Fg - Fy);
Pak doporučuji zamyslet se nad tím, jak v dvojkové soustavě (potažmo v plovoucí řádové čárce) vypadá třeba číslo 0.01 (9.81 je 981 * 0.01).
Povinná četba pro Tebe.
double a = 0.0;
double b = 2.0 - 2.0;
if (a == b)
printf("Jsi nula!");
Není tam sebemenší důvod, proč by tam bylo cokoli špatně, žádná zaokrouhlovací ani jiná chyba aproximace se v tomto případě vůbec neobjeví. Zde je porovnávání reálných čísel naprosto v pořádku.
Nebo další:
bool is_nan(double x)
{
return (x != x);
}
Také je porovnávání naprosto v pořádku, není problém.
Prostě pak se tyhle věci musí řešit tak, že se do zdrojáku napíše:
#ifdef __GNUC__ vypni_debilni_nedomysleny_gcc_warning #elif _MSVC_VER vypni_debilni_nedomyslene_ms_warningy #endifNejlépe do globálního headeru připojeného všemi moduly.
double x = ?;
if (x != x)
printf("Nerovnaji se");
A Céčko s ním jako s reálným číslem pracuje.
Ona totiž definice "počítačově uložené floating point číslo" a "matematická definice čísla" není totéž. A nan splňuje první definici, a nesplňuje druhou.
):
Pro které číslo (zdůrazňuji jde mi o počítačovou definici čísla) platí, že v proměnné a i b budou (trochu) jiná čísla?
double vrat_cislo(double x)
{
return x;
}
double a = ?;
double b = vrat_cislo(x);
double vrat_cislo(double x)
{
return x;
}
double a = ?;
double b = vrat_cislo(a);
Ovsem nerikala bych tomu chyba, ale vlastnost.