Vývojáři svobodného 3D softwaru Blender představili (𝕏, Mastodon, Bluesky) nejnovějšího firemního sponzora Blenderu. Je ním společnost Anthropic stojící za AI Claude a úroveň sponzoringu je Patron, tj. minimálně 240 tisíc eur ročně. Anthropic oznámil sponzorství v tiskové zprávě Claude for Creative Work.
VNC server wayvnc pro Wayland kompozitory postavené nad wlroots - ne GNOME, KDE nebo Weston - byl vydán ve verzi 0.10.0. Vydána byla také verze 1.0.0 související knihovny neatvnc.
Bylo oznámeno vydání Fedora Linuxu 44. Ve finální verzi vychází šest oficiálních edic: Fedora Workstation a Fedora KDE Plasma Desktop pro desktopové, Fedora Server pro serverové, Fedora IoT pro internet věcí, Fedora Cloud pro cloudové nasazení a Fedora CoreOS pro ty, kteří preferují neměnné systémy. Vedle nich jsou k dispozici také další atomické desktopy, spiny a laby. Podrobný přehled novinek v samostatných článcích na stránkách
… více »David Malcolm se na blogu vývojářů Red Hatu rozepsal o vybraných novinkách v GCC 16, jež by mělo vyjít v nejbližších dnech. Vypíchnuta jsou vylepšení čitelnosti chybových zpráv v C++, aktualizovaný SARIF (Static Analysis Results Interchange Format) výstup a nová volba experimental-html v HTML výstupu.
Byla vydána verze R14.1.6 desktopového prostředí Trinity Desktop Environment (TDE, fork KDE 3.5, Wikipedie). Přehled novinek v poznámkách k vydání, podrobnosti v seznamu změn.
Jon Seager z Canonicalu včera na Ubuntu Community Hubu popsal budoucnost AI v Ubuntu. Dnes upřesnil: AI nástroje budou k dispozici jako Snap balíčky, vždy je může uživatel odinstalovat. Ve výchozím nastavení budou všechny AI nástroje používat lokální AI modely.
Nový ovladač Steam Controller jde do prodeje 4. května. Cena je 99 eur.
Greg Kroah-Hartman začal používat AI asistenta pojmenovaného gkh_clanker_t1000. V commitech se objevuje "Assisted-by: gkh_clanker_t1000". Na social.kernel.org publikoval jeho fotografii. Jedná se o Framework Desktop s AMD Ryzen AI Max a lokální LLM.
Ubuntu 26.10 bude Stonking Stingray (úžasný rejnok).
Webový prohlížeč Dillo (Wikipedie) byl vydán ve verzi 3.3.0. S experimentální podporou FLTK 1.4. S příkazem dilloc pro ovládání prohlížeče z příkazové řádky. Vývoj prohlížeče se přesunul z GitHubu na vlastní doménu dillo-browser.org (Git).
Ř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…
), takže lze použít jakoukoliv metodu skládání.
, když jsem to psal nedošlo mě, že přes 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: