Exploze osobních komunikačních zařízení v Libanonu zabily osm lidí, přibližně 2750 lidí je zraněno. Zhruba 200 jich je v kritickém stavu.
Byla vydána Java 23 / JDK 23. Nových vlastností (JEP - JDK Enhancement Proposal) je 12. Nová Java / JDK vychází každých 6 měsíců. LTS verze jsou 8, 11, 17 a 21 a bude 25.
Byla vydána betaverze Fedora Linuxu 41, tj. poslední zastávka před vydáním finální verze, která je naplánována na úterý 22. října. Z novinek (ChangeSet) lze vypíchnout Valkey místo nesvobodného Redisu, konec Pythonu 2, instalace proprietárních ovladačů Nvidia s podporou Secure Boot, DNF 5, RPM 4.20, KDE Plasma Mobile Spin, LXQt 2.0, …
Digitální a informační agentura (DIA) přebírá od 1. listopadu správu Registru obyvatel a Registru osob. Převodem pokračuje postupné soustřeďování sdílených informačních systémů státu pod DIA (𝕏).
Společnost Apple vydala nové verze operačních systémů pro svá zařízení: macOS 15 Sequoia, iPadOS 18, tvOS 18, visionOS 2, watchOS 11 a iOS 18.
Konsorcium Linux Foundation představilo svůj nejnovější projekt s názvem OpenSearch Software Foundation zastřešující další vývoj OpenSearch a OpenSearch Dashboards. OpenSearch je forkem vyhledávače Elasticsearch a OpenSearch Dashboards je forkem souvisejícího nástroje pro vizualizaci dat Kibana. V roce 2021 přešly projekty Elasticsearch a Kibana z licence Apache 2.0 na duální licencování pod Server Side Public License (SSPL) a
… více »Valkey, tj. svobodný fork již nesvobodného Redisu, byl vydán v první major verzi 8.0.0 (GitHub). Ve čtvrtek proběhne ve Vídni Valkey Developer Day.
TamaGo je open source framework pro programování ARM a RISC-V systémů na čipu (SoC) v programovacím jazyce Go. Prezentace projektu z OSFC (Open Source Firmware Conference) v pdf na GitHubu.
Konference OpenAlt 2024 – jedinečné fórum, kde se každoročně sdružují lidé se zájmem o vývoj a využití svobodného a otevřeného softwaru a hardwaru, tvorbu, zpracování a zpřístupňování otevřených dat, svobodný přístup k informacím a vzdělávání – hledá přednášející, dobrovolníky a partnery. Konference proběhne 2. a 3. listopadu v prostorách FIT VUT v Brně. Vstup je zdarma.
Po 9 týdnech vývoje od vydání Linuxu 6.10 oznámil Linus Torvalds vydání Linuxu 6.11. Z Vídně, jelikož tam zítra začíná Open Source Summit Europe. Přehled novinek a vylepšení na LWN.net: první a druhá polovina začleňovacího okna. Později také na Linux Kernel Newbies.
Ř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 . Ale myslím, že i na „střední třídu“ se to hodí a pokud jsou classy dobře navržené, lze to rozumně skládat a vrstvit na sebe…
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: