Byly zveřejněny prezentace a videozáznamy přednášek a fotografie z česko-slovenského setkání poskytovatelů přístupu k internetu, provozovatelů telekomunikačních sítí, registrátorů domén a provozovatelů počítačových sítí a technických nadšenců CSNOG 2023 (Czech and Slovak Network Operators Group) konaného 16. a 17. května ve Zlínu.
Soutěž amatérských robotů Robotický den 2023 proběhne v neděli 4. června v Kongresovém centru Praha.
V Tchaj-peji probíhá počítačový veletrh COMPUTEX 2023. Firmy představují své novinky. Nvidia například superpočítač DGX GH200 AI.
Vyšla nová verze XMPP (Jabber) klienta Gajim. Nejvýznamnější novinkou je integrace OMEMO pluginu přímo do jádra aplikace, takže již není třeba plugin samostatně instalovat. Přehled dalších novinek je dostupný na oficiálních stránkách. Gajim je vytvořen v jazyce Python s využitím knihovny GTK a vedle Linuxu jej lze vyzkoušet i na platformách MacOS a Windows.
Komunita KDE představila stránku KDE for Developers pro vývojáře používající KDE aplikace. Postupně byly představeny stránky pro umělce KDE for Creators, děti KDE for Kids a vědce KDE for Scientists.
Společnost ARM představila platformu Total Compute Solutions 2023 (TCS23) s 5. generací GPU Immortalis-G720, Mali-G720 a Mali-G620 a Armv9.2 CPU Cortex-X4, Cortex-A720 a Cortex-A520 s DSU-120.
Na konferenci Microsoft Build 2023 byl představen Azure Linux container host for Azure Kubernetes Service (AKS). Podrobnosti ve videu s otázkami a odpovědmi. Shrnutí v článku na DevClass.
Na itch.io probíhá Linux Game Jam 2023. Zapojit se a přihlásit hru běžící na Linuxu lze do 6. června do 01:59. Zahrát si lze hry z loňského ročníku.
Na Steamu lze získat zdarma počítačové hry Warhammer 40,000: Gladius - Relics of War a Hue. Na Epic Games Storu počítačovou hru Fallout: New Vegas - Ultimate Edition.
WordPress (Wikipedie), open source systém pro správu webového obsahu (CMS), zítra slaví 20 let. První verze byla vydána 27. května 2003.
Řešení dotazu:
long long int i; signed long long int j; unsigned long long int k;Pokud nechceš long long int, ale přesně 64bitový integer, tak (špičaté závorky nepíšu, protože to je tu k naštvání)
#include stdint.h int64_t i; uint64_t j;Pokud nechceš long long int, ale alespoň 64bitový integer, tak
#include stdint.h int_least64_t i; uint_least64_t j;Pokud nechceš long long int, ale co nejdelší integer, tak
#include stdint.h intmax_t i; uintmax_t j;long long int má formátovací modifikátor ll, (u)intmax_t má modifikátor j, vše uvedené vyžaduje alespoň ISO C99 (případně rozšíření kompilátoru ve starším C), pro typy s přesnou délkou formátovací modifikátory neexistují. Pokud potřebuješ fakt velké integery, použij GMP.
ostream
je super věc a kdo si to komplikuje používáním rodiny fcí print
je v 90 % blázen, nebo to nepochopil…
cout << setiosflags(ios_base::fixed) << setprecision(2) << x << setprecision(0);jako hezčí oproti
printf("%.02f", x);To se mi nechce ani věřit. Přetěžování operátoru << je dost jednoúčelové, přijde mi lepší mít u objektu něco, jako je obvyklý javovský toString().
#include <iostream> #include <float.h> int main(int argc, char **argv) { std::cout.precision(FLT_DIG); std::cout.flags(std::ios::scientific); std::cout << "float:" << std::endl; std::cout << " min: " << FLT_MIN << std::endl; std::cout << " max: " << FLT_MAX << std::endl; std::cout << " 10 exponent min: " << FLT_MIN_10_EXP << std::endl; std::cout << " 10 exponent max: " << FLT_MAX_10_EXP << std::endl; std::cout << " digits: " << FLT_DIG << std::endl; std::cout << " Epsilon: " << FLT_EPSILON << std::endl; std::cout.precision(DBL_DIG); std::cout << "double:" << std::endl; std::cout << " min: " << DBL_MIN << std::endl; std::cout << " max: " << DBL_MAX << std::endl; std::cout << " 10 exponent min: " << DBL_MIN_10_EXP << std::endl; std::cout << " 10 exponent max: " << DBL_MAX_10_EXP << std::endl; std::cout << " digits: " << DBL_DIG << std::endl; std::cout << " Epsilon: " << DBL_EPSILON << std::endl; std::cout.precision(LDBL_DIG); std::cout << "long double:" << std::endl; std::cout << " min: " << LDBL_MIN << std::endl; std::cout << " max: " << LDBL_MAX << std::endl; std::cout << " 10 exponent min: " << LDBL_MIN_10_EXP << std::endl; std::cout << " 10 exponent max: " << LDBL_MAX_10_EXP << std::endl; std::cout << " digits: " << LDBL_DIG << std::endl; std::cout << " Epsilon: " << LDBL_EPSILON << std::endl; #if defined FLT_ROUNDS std::cout << std::endl; std::cout << "Type of rounding floating numbers: "; switch(FLT_ROUNDS){ case -1 : std::cout << "indeterminable"; break; case 0 : std::cout << "towards zero"; break; case 1 : std::cout << "to the nearest number"; break; case 2 : std::cout << "towards positive infinity"; break; case 3 : std::cout << "towards negative infinity"; break; default : std::cout << "? - no standard definition"; break; } std::cout << std::endl; #endif return 0; }a vynikne to, že kód je stejně čitelný jako jeho výstup. Styl formátovaní lze nastavit jen 1×, ne opakovaně pro každé číslo. Pak se jedním přepnutím formát všech čísel změní dle potřeby.
//trhlé zobáčky cout << v << endl; //print metoda to string printf("%s\n",v.toString().c_str()); //printf po jednom printf("%.02f,%.02f,%.02f\n",v.i,v.j,v.k); //nebo printf("%.02f,%.02f,%.02f\n",v.getI(),v.getJ(),v.getK());Obecně metoda
toString()
je trochu něco jiného, ta pracuje se stringem, ale zobáčky se stream-em a ten může být cokoliv, string, stdout, stderr, soubor…, takže zaměněním std::cout
za ukazatel typu std::ostream
, jedním přehozením ukazatele zapisujete do souboru nebo na stdout, nebo cpete data do parseru, je to daleko flexibilnější.
print xnadchne stěží. Uvedený příklad je vtipný, protože (a) v C lze napsat přinejmenším stejně čitelně (b) polovina využívá velké zlo z C, tedy preprocesor (všechna ta FLT_xxx jsou jakási makra, nemají žádný namespace, prostě hrůza hrůzoucí). [*] Taky funguje s libovolnou třídou.
PRIx64apod., což tu čitelnost a stručnost trošku zhoršuje. Ale ať si každý používá, co chce. Čím víc se toho musí opravovat (a je jedno, jestli zbytečně, nebo odůvodněně), tím více je pro nás práce
- chci střídat formát výstupu (ne vše potřebuju na stejný počet desetinných míst)Ano, pokud musíte střídat nastavení výstupu čísla, napíšete toho více. Ale setkávám se daleko častěji s opačným požadavkem.
- jeden typ objektu má dvě možné řetězcové reprezentacePopravdě toto jsem čekal jako první námitku, ale řešení je identické jako když máte metody toString() a podobné, prostě předem přepnete formát výstupu. Nemyslím, že je to
cout
vs. printf
, protože to řeší daný objekt interně a je sám odpovědný za formát výstupu. To je prostě jiný problém.
- formát výstupu se neřídí samotným objektem, ale něčím z vnějškuTak buď je to zodpovědnost toho objektu nebo jiného objektu a když je to „nedefinovné“ skládání „něčeho“ venku, tak ano asi si napíšete toho více, ale je otázkou, jestli když se bavíme o C++, není-li někde chyba návrhu (netvrdím, že je), ale jste ve stejné situaci a je jedno jestli to sypete pomocí cout nebo printf, krom toho, že platí „námitka“ první.
- potřebuju sypat různé hodnoty do předpřipravených šablon (genialita printf)Souhlasil bych, kdyby byly parametry očíslovány.
- potřebuju skládat data "nelineárně"Nevidím asi rozdíl, malý příklad by nebyl?
formát: nu, já třeba v matematických aplikacích to řeším - často pro různé kontroly chci zběžně zkouknout hodně čísel na pár desetinných míst.No a právě tady mi to připadá super, bo vysypu celou matici, vector nebo cokoliv hned a je klid…
reprezentace: pokud mám výstup z objektu řešený pomocí metody toString(), není problém tuto metodu rozšířit o další parametr s implicitní hodnotou popisující styl výstupu. Rozdíl oproti přepnutí formátu výstupu je ten, že přepnutí formátu je globální změna, ovlivňující další chování programu, což je věc veskrze zavrženíhodná. Takové věci pak aby prase ladilo.To beru kompletně (jakože souhlasím).
nelineárně: no do coutu těžko pošleš nejdřív konec výstupu a pak začátek, stejně tak do stringstreamu. U skládání stringů snadno string předřadíš před zbytek (a máš-li inteligentní řetězce, tak i levně). Takže opět člověk skončí u toho, že si nejprve poskládá celej výstup (řádku) a tu pak vyplivne najednou.Ale to je stejné i s printf-em. Když je třeba čupr formát, tak to stejně lze akorát poskládat do string-u a je docela jedno kterou funkcí a zas lze používat oba přístupy, ale já rozhodně ten string pak vysypu pomocí <<
Operátor << se IMHO hodí na rychlé vypsání věcí, u kterých tak nezáleží na kvalitě prezentace: prostě chci něco vysypat, napsat to co nejrychlejc, a nezáleží mi na tom, jak to bude vypadat. Pokud ale chci složitější věci, tak je najednou spousta věcí přes ruku....Ano, určitě to není, stejně jak fce printf, na nějaké složité a třeba i uživatelsky definované formátování, to si každý musí stejně napsat sám a může pro to použít jak stream, tak printf nebo třeba itoa
fprintf
můžu i na stdout
atd. a popravdě kdybych to psal (jakože rodinu printf nepoužívám už 300let), tak bych dělal nějaký switch
a volal printf
nebo fprintf
.
Tiskni
Sdílej: