Julii pouzivam docela casto. Momentalne jsou tam v hroznym srabu grafy, jinak to jde. S matlabem to kompatibilni nijak bejt nema a nechce (narozdil od SciLabu a Octave). Ale da se volat MATLAB externe, vymena datovejch struktur funguje docela hezky. Jestli to nekde neleakuje, to jsem neoveroval, ale asi je to cisty, protoze mi to nikdy neslitlo a to jsem pres to cpal nehorazny mnozstvi dat.
Simulink je skutecne vybornej nastroj a rozumnou nahradu neznam (scicos nebo jak se jmenoval jsem videl v dobach, kdy za nahradu nemohl bejt povazovan i jen pro hnusnost GUI, a to jsem v tomhle hodne tolerantni; mozna mel streva shodny nebo i lepsi nez Simulink, ale neslo se mi pres to prenest). Transpiler je podle me scifi.
Naproti tomu lze volat Julii z C a C (MATLAB) z Julie.
Kdybych mel propojit Julii se Simulinkem, asi bych si napsal v C S-funkci a z ni volal Julii. Podle me by to melo i smysl. Simulink by se postaral o vazbu systemu, ovladaci prvky a vizualizaci a Julie by pocitala.
Taky jsem ridic. Julii zatim nepouzivam na vsechny operace. Podle me za to stoji, jinej nez knihovni kod je brutalne rychlejsi a krome toho je (subj.) mensi mozkozer v tom psat.
V neposledni rade casto vim, ze budu pracovat s necim jinym nez floatem a chci, aby to probihalo nejak inteligentne. Jakmile uz je krome samotny matiky vazba na treba v mem pripade SQL a ProtoBuf, neni co resit, pohodli a lehkost psani oproti matlab/scilab/octave prevazi.
Jeste neco k aplikacim Julie v teorii rizeni a signalu (z nakejch smutnejch asi dejinnejch duvodu si jedou tyhle dva obory napul na svym LTI pisecku, nevim proc). V Julii je zatim jen zakladni DSP tbx (zato, rekl bych, zapocatej velmi slusne -- napr. objekt filtru zda se mi rozumnejsi, nez neobjektovej pristup v klasickym sig.proc.tbx -- umoznuje napr. pustit FIR/IIR filtr na singal nekonecne delky po castech a to syntakticky prijemne). Dale pak, pokud se neco nezmenilo, chybi i to, co je matlabakum znamo jako "control toolbox" a ve skutecnosti je to takovej obal nad knihovnou SLICOT.
Mate-li spetku sil, urcite by stalo za to dostat SLICOT do Julie. SLICOT je zajimavej projekt, ve svem puvodu a podstate open-source, ale jelikoz byl zaprodan (i) do MATLABu, jeho opensourcovatost se vselijak taji a existuji open- i neopen forky. K puvodni verzi a repozitarum se dostat lze a zda se, ze v nem stale probiha puvodni matematickej vyvoj, tj. snad se objevuji i novinky nejen na poli implementacnim. Octave nejakou verzi SLICOTu ma. Zajimavy ovsem je, ze ani MATLAB nepouziva ze 100% fci SLICOTu.
V prvni vlne by bylo bezva, kdyby aspon ten FORTRANskej SLICOT externe volanej v Julii chodil. V nejakem budoucnu by pak asi stalo za to nektery kusy SLICOTu prepsat nativne do Julie, aby chodily ty bigfloaty a tak -- zrovna v teorii rizeni to ma extremne dobrej smysl. (Jedna z mejch motivaci pro Julii byla, ze v bigfloatech sly resit veci se spatne podminenejma systemama, napr. kraceni nul a polu u systemu, kde casovy konstanty mely rozsah nekolika radu -- fakt parada.)
Sam na to bohuzel nemam cas :-( Ale klidne bych se podilel jako kibic/tester/...
Aha, tak to zní zajímavě. No síla by i byla, ale toho času není. SLICOT neznám, aspoň o tom nevím, nejvíce to bude záležet na tom, jestli ho budu potřebovat. Mám začínat vetší projekt, chtěl jsem to dělat v Octave a přemýšlím teď nad tou Julií. Zatím jsem ve stadiu, kdy si ještě můžu vybrat . . .
Dle clanku Julia ma byt lepsi jazyk nez Matlab/Octave/Numpy/Scipy/R, cokoliv. Jakozto clovek zivici se numerickymi vypocty profesionalne mam spis pocit, ze neni potreba novy jazyk, ale ucelenejsi soustava knihoven. Ostatni programy jsou dobre prave proto, ze umi spocitat ten statisticky test, onen typ prolozeni, generovat nahodna cisla podle tohoto rozdeleni atd. Jsou dobre diky svym rozsahlym knihovnam. Jestli smycku musim napsat jako for...end nebo for{...} ci jakkoliv jinak, tak to je mi celkem ukradene. A jestli se neco pocita 0.01 nebo 0.02 vteriny taky neni pro mne az tak dulezite, protoze ja stejne nedokazu napsat tak optimalizovany program, abych to vyuzil. Teda je pravda ze pri nekterych simulacich uz to citim, ale jestli se neco pocita 2 dny, a s Julii by se to pocitalo o 2 hodiny kratsi dobu, tak to neni duvod.
Naopak me zarazi, ze pokud autori Julii meli moznost to udelat od zacatku spravne, proc pri preteceni se nenastavi nejaky priznak Overflow, a misto toho se tam nastavi 0 (ono 2^70). To je primo zhovadilost. Octave/Matlab tam hodi Inf, a hned vim ktera bije, ze musim dohledat nejakou chybu, at uz v rovnici nebo v programu.
Takze vlastne musim rict, ze me tenhle clanek od jazyku Julia docela odradil.
Nezatracujte Julii příliš brzy. 2^70 sice vyčíslí jako 0, ale 2.0^10000 vrátí jako Inf. Rozdíl je v tom, že v prvním případě pracuje s celými čísly a pro ně Inf není definováno. Ve druhém případě pracuje s číslem typu Float64 a tam už Inf je definováno v IEEE 754. Pokud si dobře vzpomínám, tak Matlab a Octave provádějí všechny operace v double.
Julia má mnoho velice přitažlivých vlastností, které se do úvodního článku nevešly: vícenásobný dispatching, provázanost s JIT, snadné externích volání knihoven a poměrně rozsáhlý balík vlastních knihoven. Počkejte si na další díly a třeba změníte názor.
No jo, jenže python má virtuálně nekonečný int, nemusím řešit žádné typy...
>>> 2**700
5260135901548373507240989882880128665550339802823173859498280903068732154297080822113666536277588451226982968856178217713019432250183803863127814770651880849955223671128444598191663757884322717271293251735781376L
To ma Julca taky, akorat je ji potreba rict, ze ma pracovat s nim. A zaroven je rozhodne dobry, ze ma Julia krome bigintu i vsechny inty konkretnich bitovejch delek. Mozna patrite k skupine lidi, ktera uprednostni, kdyz si jazyk sam urci, v jakym typu se jede, ale me osobne takovy chovani pripada krajne nevyhodny.
Začínal jsem na BASICu, pak Assembler, pak Pascal, pak C, pak C++, dnes mě živí i Java, ale od té doby, co do nás ve třeťáku na VŠ nahustili FORTRAN 77 kvůli numerice, dělám všechno, kde převažuje numerika, ve Fortranu 95 a zatím jsem nenarazil na nic, co by mě motivovalo to změnit. Množství odladěných knihoven - jak matematických, tak fyzikálních, tak technických, rychlost výsledného kódu, přímočarost při psaní programu, podpora polí, rozsáhlá komunita odborníků - to všechno dohromady zatím bezkonkurenční a popravdě mi uniká, proč se neustále někdo snaží to nahrazovat něčím jiným.
Máš ambice dělat numeriku seriózně? Nauč se Fortran. Konec konců je to jen nářadí, ale na seriózní práci je třeba seriózní nářadí, do něhož lze upnout standardní nástroje, a ne nějaká dětská sada na hraní.
DSP bych snad ani numerikou nenazýval. DSP obnáší obvykle nějakou konvoluci, proveditelnou v Assembleru ve fixed-pointové aritmetice, a to co nejrychleji. Tím to hasne.
Numerikou mám na mysli simulace, výpočty s PDE, proudění v kotli, obtékání profilů, pružnost-pevnost, jaderně-fyzikální výpočty apod. K tomu jsou zapotřebí specifické knihovny, provádějí se tam poměrně náročné maticové operace, vedle řešení soustav například hledání vlastních čísel, počítání determinantů. Při výpočtech metodou konečných prvků se například výborně uplatňují fortraní schopnosti vysoce optimalizované extenzivní práce s poli. A rychlost kódu je taktéž dosti zásadní, je docela rozdíl, trvá-li výpočet týden nebo měsíc. On ten čas něco stojí.
Opravdu mi nejsou jasné ty "oběti na čase a duševní pohodě". Možná by stálo za zvážení, zda se nevěnovat něčemu intelektuálně méně náročnému. "Oběti na čase a duševní pohodě" přinášeli především kolegové, kteří si vybírali nějaké své vlastní cesty, aby se pak ukázalo, že se v tom nakonec sami totálně ztratěj, vzdají to a utečou a celé to nakonec musí někdo udělat za ně. Ale tímhle se momentálně neživím, nicméně stejně pochybuji, že by zde došlo k nějaké revoluci.
Ale to jsou mi moudra povyseneho rozumbrady :-) Tak ze sveho pohledu povyseneho rozumbrady pozmanem nasledujici:
- omezovat numeriku na FEMy mi prijde velmi omezene;
- pokud nedohlednete v DSP dal, nez ke konvoluci a filtrum zadanejm dvema vektorama koeficientu, pak to jen svedci o tom, ze o DSP nevite temer nic; namatkou, uplatnuju tam sirokou skalu maticovejch operaci vcetne operaci s ridkejma maticema, faktorizaci, atd. (Cholesky, QR, UDU, Sylvester, SVD,...). Opravdu nevim, jak jinak nez numerikou to nazvat. Krome toho zakladni operace vetsiny DSP technik je FFT a to je numerickej podobor sam o sobe;
- u tech FEMu a fortranska "vysoce optimalizovana extenzivni prace s poli" nejak netusim, jak se lisi od v.o.e.p.s p. v C nebo Julii; podotykam, ze ve Fortranu obcas pisu (velmi vzacne, F9*) a je mi znamo, jak ma ulozena pole v pameti, ale co znamena toto reklamni sdeleni, si bohuzel neumim predstavit;
- k tem obetem, to jste me pobavil: ja jsem v nejvetsi dusevni pohode, kdyz se prave *mohu* venovat necemu intelektualne narocnejsimu, nez jak (tupe, nezazivne a riskantne) zapsat elegantni myslenku neelegantnim kodem. Radsi tutez napisu o neco hezcim kodem.
- vlastni cesty v numerice moc nehledam, naopak se snazim pouzit neco, co dali dohromady chytrejsi. Julie jsem parkrat pouzil jako ucelnej nastroj na nektery ulohy, jimiz se zivim a bavim.
No ale jinak je samozrejme obcas potreba dat si pauzu a misto intelektualni cinnosti si treba pokecat ve foru, v tomto jsem s vami zajedno :-)
To klidně přiznám, že nejsem žádný velký expert na DSP. Já tam opravdu dělal jen filtry a transformace a tím to hasne a nikoho jiného jsem taky neviděl, že by tam dělali kdo ví co. Ale dovedu si představit, že třeba u GSM a LTE technologií se mohou uplatnit i další metody, to je pravda. Jenže tam to asi stejně nakonec bude muset být přepsáno do Assembleru v kombinaci se specializovanými HW moduly, ne? Nebo u vás se věnujete nějakému hardcorovému postprocessingu signálů offline?
A čím ta Julie podle tebe tak válcuje ten Fortran? V jazyku samotném oproti Fortranu žádné killer features nenacházím, zato si dovedu představit problémy při kooperaci s fortraními knihovnami, s rychlostí kódu to asi taky žádná sláva nebude... Takže jednoduchá otázka - proč?
Dekuji za rozumnou odpoved. Nejdriv k te Julii vs. Fortranu. Kooperace s fortrannima knihovnama je zcela v pohode a samozrejme se jich ohromna spousta vyuziva, na tom jsou postaveny i MATLAB/Octave/SciLab. Urcita vyhoda je v FFI. Jazykovou vyhodou oproti Fortranu uz je prave treba to, ze muzu volat map() a apply(), zrovna treba u optimalizacnich problemu se tohle hodi. Sirsi repertoar ciselnejch typu (od bitu po bigfloaty). Velmi prehledny napojeni ruznejch vysokourovnovejch I/O, ja jsem daval jako priklad ProtoBuf a SQL, ale urcite je spousta jinejch zdroju a cilu dat. Za killer-featuru povazuju ten system typu, diky nemuz je mozne: 1. jednu fci znovuvyuzit pro ruzne zpracovavane typy (aniz by je treba autor fce vsechny znal), ale 2. zachovat moznost optimalizujici kompilace.
(Jinak v modernim Fortranu jsem nedavno psal skutecne jen par malo radku (pouzivani ciziho SW baliku) a nutno rict, ze to nebyl tak odpudivej humus jako driv. Ale druh prace je to porad jinej nez v tech vysokourovnovejsich nastrojich.)
Ad DSP co delam(e): jednoduse receno od implementace v samotnem HW az po ten (post)processing na CPU. V soucasne dobe dokonce zvazuju, ze jednu vec v Julii necham bezet v realnem case na data blizici se Gb/s prijimana primo z druzice. U DSP (a teorii rizeni) jsou zajimave algoritmy jak behem samotne "filtrace" (tedy pruchodu signaly nejakymi systemy, regulatory a filtry), tak ve fazi "navrhu" (kdy je potreba ten filtr/regulator vytvorit) -- oboji je numerika, protoze ani ten navrh, krome specialnich pripadu, nejde treba resit analyticky. Nebo jde a stejne to vede na optimalizaci treba vahovanejma nejmensima ctvercema.
Knihoven ve F77 je obrovské množství, většina. Ale není problém je použít i z F95, kód se dá použít i stylem copy-paste přímo ve zdrojáku, což je veliká výhoda.
F95 ještě OOP nemá, to se přidalo až ve F2003. Ale pomocí module a type se něco jako OOP dá udělat i ve F90, kdyby bez toho někdo fakt nemohl žít.
Výhoda F90/95 oproti F77 je v tom, že z Fortranu dělá normální strukturovaný modulární jazyk, který se obejde bez goto, což F77 rozhodně není, odstraňuje pevný formát zdrojáku, odstraňuje 6znakové omezení délky identifikátorů a další nešikovnosti před-ASCII a děrnoštítkového původu, není už třeba čarovat s common bloky, přidává dynamickou alokaci a mnoho užitečných (a přitom rychlých!) operací s poli a jejich částmi (m-tý řádek krát n-tý sloupec, každý n-tý prvek apod.) a rozšíření většiny matematických funkcí i na argument typu pole, což je pro numeriku fakt dost zásadní. Navíc tímto zápisem se spousta cyklů mění na implicitní, což dále zvyšuje přehlednost programu a možnost optimalizace překladačem. Tím, že to nejsou knihovní funkce, má optimalizátor překladače velikou výhodu a dokáže vyprodukovat i solidní paralelní kód, aniž by programátor pro to musel něco udělat. Použitím pure function, elemental subroutine, forall, where/ elsewhere, codimension, sync apod. se dá překladači ještě dále pomoci v optimalizaci a program je navíc velmi přehledný.
Chápu, že F77 dokáže znechutit spoustu lidí, ale F90/95 už je normální, dobře čitelný, bezpečný a pro numeriku výborně uzpůsobený jazyk, jehož je F77 podmnožinou, F2003 dokonce objektový (ale to mi zrovna v tomto případě nechybí a pokud je mi známo, tak stejně většina lidí, kteří dnes tvoří nový kód ve Fortranu, bere za standard F95).
Chápu tažení proti F77, ale od té doby, co je F90/95, mi nikdo nebyl schopen vysvětlit, co má proti Fortranu. Pokaždé se totiž ukázalo, že ten jazyk dotyčný vlastně vůbec nezná.
Kdybych měl více času, tak bych třeba dal dokupy nějaký seriál o F95, abych ten jazyk a jeho schopnosti trochu přiblížil širším kruhům. On tu na rootu jakýsi seriál vycházel někdy před 10 lety, ale to bylo opravdu jen naprosté minimum.
Kdybych já chtěl vytvořit nějaký nový numerický nástroj s REPL, tak bych nevynalézal kolo, ale narazil bych to na moderní Fortran. To je to, co mi chybělo – nevím jak dnes, ale za dob mého doktorandování se k laborování používala Mathematica, Maple a Matlab a pak se to celé přepisovalo do Fortranu.
Ja mam prave dojem, ze to diky prekladu pres LLVM muze byt docela rychly. Je fakt, ze ty benchmarky linkovane z clanku jsou takove nijake, chtelo by to vice (mnohem vice) testu. Jinak nic proti Fortranu, Julia ma spis byt nahradou za Octave nebo R, nikoli za Fortran (vsak taky LAPACK tusim bere puvodni).
Z FORTRANu bych blil. Přes tu musejní syntaxi bych se možná ještě přenesl, ale vzhledem k tomu, jakým stylem v něm daná část fysikální komunity pras^H^H^H^Htvoří, dokázal jsem si k němu vypěstovat značný odpor.
Céčko je z hlediska nástrojů s FORTRANem naprosto srovnatelné, a přinejhorším se dá nějaký extrabuřt psaný ve FORTRANu do céčkového programu nalinkovat.
Jakozto clovek zivici se ze znacne casti numerikou musim rict, ze Julii vitam a podle me rozhodne *je* duvod pro jinej jazyk, nejen pro pod tim lezici knihovny.
Konkretni priklad, proc jsem Julii uvital: moznost rozumne pracovat v cislech s libovolnou presnosti. Tohle je neco, co treba do Matlaku kvuli jazykovejm omezenim dostanete jen s prisernou ztratou na vykonu a to jeste tak, ze budete rad, kdyz bude chodit + - * / a pak kdyz bude treba... co ja vim, treba najit koreny polynomu nebo provest netrivialni rozklad matice, tak smula, nutno implementovat znovu. Tady, kdyz nejaka funkce je naprgana pro "cislo", tak to proste bude fungovat i s nove zavedenym, nebo libovolnym dosud existujicim typem.
Dale, ten matlabi hnusnej datovej vsehotyp a fixace na to, ze jednorozmerne pole neexistuje jsou proste humus. Plus prijemnejsi prace s lambdama v Julii (apply...).
Uvodem se zeptam, co je povazovano za nejpresnejsi merak v oblasti elmag v republice. Elmag je dost sirokej pojem, pokud je to jen mag., tak naposled vim jen o kariere pana soucasneho dekana FELu, postavene na jeho pokracovani v slepejich Fritze Primdahla z DTU. Ale mozna uz mame v republice i nejakej lepsi magnetometr, bylo by nacase (ze by opticke cerpani a <1pT?).
K cemu libovolna presnost: v praxi se mi to hodilo, co si vzpomenu, dvakrat. Jednak pri praci s presnym casem; narazite na metrologii, tak asi nemusim zduraznovat, ze jedna SI jednotka vladne (skoro) vsem (napriklad 1kg stale vzdoruje, ale snad ne nadlouho). 20 platnych mist se v praxi potka a to uz jsme na 64 bitech mantisy (!).
Druhej a mnohem zajimavejsi protoze mezioborovej duvod pouziti presny aritmetiky u me byl, kdyz jsem potreboval kratit nejaky polynomy v teorii rizeni. (Konkretne: Wieneruv filtr.) Sice lze k vysledku (mozna) dojit i aplikaci jinejch numerickejch metod, ale mne konkretne se zalibila moznost proste misto toho, abych problem prevedl na faktorizace matic (a jiny hruzy, ktery by v dany uloze dost mozna dojely opet na numericky potize) proste zustat u kraceni polynomu, akorat jejich koreny diky te libovolne presnosti mohly byt vycisleny natolik presne, ze se kraceni seslo. (Zaujalo to i meho profesora ridici techniky. Zel jsem neprisel na zobecneni metody pro MIMO systemy, ale to uz zabihame do podrobnosti.)
cas jsem cekal, ale skoda ze jste nerozvedl detaily. svetova porovnani ukazuji nejlepsi nejistoty v radu 10^(-15), ve vyzkumu jsou zdroje frekvence nekde na radu 10^(-18). ale s timhle se clovek bezne (chapej mimo 10 metrologickych institutu na svete) nesetka, a nema smysl aby v techle presnostech pocital.
tedy porad bohuzel nechapu, kde v praxi potkate 20 platnych mist?
jinak v elmag je to josephsonuv etalon, relativni nejistota 10^(-10), neboli pokud se pri vypoctech naakumuluji chyby na radu 10^(-11), tak to nema zadny vliv na vysledek.
jde o relativni hodnoty. samozrejme pokud by clovek meril napr. picotesla, tak nema smysl pocitat treba v megatesla. pokud clovek napise rovnici tak blbe, ze se mu michaji ve vzorci rady v obrovskem rozsahu, tak pak libovolna presnost je treba, ale je to hloupost a zbytecnost.
Detaily sem asi nepatrej, ale nebranim se podrobnejsimu popovidani, koneckoncu, snad se behem cervna dostanu i do Brna. Ano, mj. i svetova porovnani jsou to, co resim. Pro me je to tedy praxe a otazka, kde v praxi, je zodpovezena. V geodezii se bezne prumeruji casove rady trvajici nekolik let, tak tam uz se tech platnejch mist nasbira hodne i pri uvazeni toho, ze apriorni stredni hodnoty odecitame.
Ad pT vs. MT: to je samozrejme pravda a plati to napric obory.
Cisla pro koncovy uzivatele skutecne muzou nejakejch ~10 platnejch mist mit. K tem cislum je ale potreba nejak dojit, (ridky) soustavy o milionu rovnic nejsou nic neobvykleho. To i s velmi dobrejma numerickejma algoritmama uz je vyzva. (Nicmene stale jich vetsina jede na doublu, aspon pokud vim -- jen je potreba znacne opatrnosti.) Puvab presne aritmetiky je v tom, ze muzu napriklad konzistentne ulozit data. To jsou treba roky casovejch znacek s rozlisenim v radu ns..fs (podle toho, v kterem jsme desetileti). Samozrejme si misto toho muzu delat nejaky vlastni struktury z intu (a v C to tak delam, koneckoncu, dela to tak kazdej, viz struct timespec ci NTP datum), ale je to dost nepohodlny.
Uvadel jsem vyse ale i jinej zajimavej zpusob vyuziti libovolne aritmetiky, a to na kraceni polynomu, coz je v DSP/teorii rizeni uzitecna operace a tradicne se to tak nedela, tradicne se pouzivaji brutalne slozite algoritmy primo na dane faktorizace (viz treba SLICOT). Ale i ty maji nekde meze a pokud mam u atomovejch hodin specifikovanou presnost se zlomama spektra sumu rozlozenejma pres 5 radu, pak to ani nejlepsi (tradicni, doublovy) algoritmy proste nedavaj, nebo stezi.
Podle me nejde ani tak o presnost jedine hodnoty, co vyleze z meraku (nebo serie hodnot), ale o vypocty. Uz jenom par stovek souctu nad floaty/doubly vede k mnohdy monstroznim chybam, nehlede na nekomutativitu a neasociativitu vsech operaci. + problemy s cisly typu 0.1 (nelze presne reprezentovat) vedou k tomu, ze napriklad operace v bankach se s float/double nedaji rozumne delat.
Což obvykle svědčí o špatně podmíněných algoritmech. V takových případech výpočty s libovolnou přesností příliš nepomáhají. Trochu ano ale nešikovně zvolený algoritmus může velmi rychle divergovat k nesmyslným výsledkům.
Komutativní zákony ve výpočetní technice nebudou obecně platit nikdy. Jestliže má číslo 0.2 nekonečný binární rozvoj, k jeho přesnému zobrazení v počítači je potřeba nekonečná paměť. Za mých mladých let to byl problém a mám takové temné tušení, že je to drobný technický problém do dneška...
Buď špatné algoritmy nebo špatně zvolené datové typy :-) Typicky pokud víme, že 0.1 nelze v IEEE 754 floatech reprezentovat, tak volbou tohoto typu na výpočty, kde se používají desetiny a setiny (centy, halíře - vše musí být podle zákona), si zaděláváme na problém a mnoho programátorů mě do očí tvrdí "ale s doublem už to bude v pohodě, ten je _přesný_".
U některých výpočtů je například lepší se spolehnout na zlomky, samozřejmě pokud se pracuje s racionálními čísly atd.
IEEE 754 je jen jedna z možností, jak reprezentovat floaty, používají a používaly se i další formáty:
http://www.mrob.com/pub/math/floatformats.html
(zajímavé mohou být ty formáty, kde je B=10 nebo B=100, protože tam s 0.1 problém není, samozřejmě zase bude problém s jinými hodnotami, záleží na tom, co a jak je potřeba řešit a jak rychle - třeba místo floatů jít do fixed point apod.)
> je to drobný technický problém do dneška
Tak treba IBM zSeries mainframe (procesor) ma uz par let dekadicka cisla v plovouci radove carce.. (Mimochodem je to docela zajimave udelane, pouzivaji kodovani 3 cifer do 10 bitu.) Takze reprezentovat 0.2 fakt neni problem. Casem se mozna podobny koprocesor dostane i do beznych PC.
hm, matlab/octave jsem v te tabulce http://www.mrob.com/pub/math/floatformats.html nenasel, ale zkusil jsem v octave secist cislo 0.1 10^8krat, a relaivni chyba byla ~-2^(-9). to mi neprijde az tak katastrofalni.
To ovsem nic nerika o tom, jak ta chyba oscilovala kolem spravnych hodnot.
S 0.1 je to s floatama sranda, napriklad (pochopitelne) neplati, ze
suma deseti 0.1 == 1.0
takze typicky skolni priklad na nekonecnou smycku:
#include <stdio.h>
int main(void)
{
float f;
for (f=0.0; f!=1.0; f+=0.1) {
printf("%f\n", f);
}
return 0;
}
no a tak je to se vsim :) protoze != a == na floaty se proste nesmi pouzivat! (jen fabs(x,y)<delta)
To je pravda, v tomto pripade to pujde (pokud se striktne zachova typ, tj, zadne float to double apod.). Ale obecne se na tyto operace spolehnout neda a musi se striktne porovnavat abs s nejakou deltou - coz je fajn, clovek si aspon presne uvedomi, co vlastne znamena "rovna se" a s jakymi hodnotami dela.
"Naopak me zarazi, ze pokud autori Julii meli moznost to udelat od zacatku spravne, proc pri preteceni se nenastavi nejaky priznak Overflow, a misto toho se tam nastavi 0 (ono 2^70). To je primo zhovadilost."
Naopak! Ja jsem moc rad, ze to konecne udelali spravne, tedy tak, ze kdyz pracuju s intama, chova se to intove, kdyz s floatama, tak floatove atd. Koneckoncu, kdo je opravdu numerik, tak by na to mel bejt zvyklej i z praveku, nebot ve Fortranu (a C) se taky chova jinak "0" nez "0.".
Lidska disciplina nutna k tomu vybrat si datovej typ a psat konstanty podle nej je zde uplne minimalni a zisk v tom, ze jazyk dela, co potrebuju a ne nejak umele-inteligentne zvolenou kravinu, je ohromnej.
Pro mne osobne je ta nutnost vybirat si datove typy spis otravnost, dana vyvojem a omezenim pocitacu. Nejsem ajtak, a kdyz to nemusim resit, tak mi to umozni soustredit se na tu matematiku, a ne na psani zdrojoveho kodu.
Kdyz si pocitam na papire, tak taky neresim jesli pisu inty nebo floaty :)
Pokud na papire neresis, jestli vysledek vysel celociselne, tak to nekdy muze znamenat tak drasticke rozdily, jako jestli pracujes se sumem nebo s periodickym signalem. Pokud na papire neresis, jestli vysledek je realne nebo komplexni cislo, pak se asi mijis s celou existujici algebrou. To nemluvim o telesech, okruzich a vubec algebre jako takovy -- to je system typu (objektu) a funkci nad nima par excellence.
Ja na papire resim intovost, floatovost a complexnost pokazdy a vyzaduji, aby mi v tom pocitac nedelal o svoji vuli bordel ;-)
Jde o to (mozna jsem to mel vic zduraznit), ze typovy system Julie je sice dynamicky, ale striktni. Takze kdyz chcete pracovat s integery, bude se pracovat s integery a neni tam zadna automagie, ktera by najednou prepnula na floaty (coz je stejne blbost, protoze se ztrati nejnizsi cifry, takze budme radi, ze to neumi :). Kdo chce floaty, primo je specifikuje, stejne jako ve Fortranu atd. No a pokud si je nekdo jisty, ze pro numericke vypocty potrebuje BigInt nebo BigFloat, tak je pouzije. Navic je mozne (to jsem zatim nezminil) u floatu ridit rezimy zaokrouhlovani, nejedna se o zadnou raketovou vedu, ale je dobre to vedet a kdyztak pouzit.
Ale chapu, ze nekomu to nemusi vyhovovat, me napriklad nevyhovuji systemy, kde se automaticky prevadi (u nejakych operaci) int->float/double bez moznosti to ovlivnit.
Par praktickejch postrehu z Julie:
- grafy v pruseru (to asi ve svete obecne, slusnej je Gnuplot ale jeho dementni licenci uz nikdo nepredela); kde jsem potreboval rychlost nebo aby to neleakovalo, musel jsem si dopsat vlastni grafovac ve fltk;
- paradni FFI, dodelaval jsem si do Julie MQTT a byla to otazka chvilky, vola libmosquitto.so a pohoda;
- jazyk jsem pochopil tak, ze klade extremni duraz na system typu a konverzi, podle me se to vyplatilo, spousta veci pak funguje uplne vyborne a logicky, namatkou:
-- ProtocolBuffers (ProtoBuf.jl)
-- sqlite
- umi volat externe MATLAB (bezici matlabi instanci), hodi se, kdyz neco neumi matlab a neco zas neumi julia, ale je to samozrejme bida.
Dik za tip, rad vyzkousim. Zatim co do .png a .eps vystupu mi prislo, ze jsem z niceho nevyzdimal tak peknej graf, jako z patricne osetrenyho Gnuplotu. Ale tim netvrdim, ze je Gnuplot nakej nedostiznej cil, spis jen mi dosud vsechno ostatni pripadalo jako nebetycnej hnuj. R neznam a ggplot2 tudiz taky ne, rad se poucim.
Pomocí ggplot2 uděláš grafy na úplně jiné úrovni. Viz https://www.google.cz/search?tbm=isch&q=ggplot2
Super článek, bude pokračovat nějakou delší sérií?
Mně by hlavně zajímalo, jestli je Julia jenom nadějný jazyk, který se vyplatí sledovat, nebo už má smysl ji i prakticky využívat. Např. mám nový projekt, má smysl ho začít psát v Julii? Nebo je to pořád ještě moc tekutý písek?
Jestli budou nějaká další pokračování, poprosil bych, jestli by šlo se trochu zmínit o interoperabilitě. Zajímalo by mě hlavně Rko a jeho knihovny.
Diky.
Tak planuju jeste par dilu napsat, cekal jsem hlavne na reakce pod timto clankem :)
Julia jeste nedosla k verzi 1.0, ale ty posledni verze (ne z oficialnich rep distribuci, to je vetsinou strasne zastarale!) me pripadaji dost stabilni a funkcni. Jazyk s velkou pravdepodobnosti menit uz nebudou, na druhou stranu na stabilitu F77 to nema ze ;)
Ja kdybych mel ted neco zacinat - nejakou statistiku nebo analyzy big dat - klidne bych to napsal v Julii. R-ko je sice na prvni pohled fajn, ale uz jsem se parkrat pekne strelil do nohy.
> R-ko je sice na prvni pohled fajn, ale uz jsem se parkrat pekne strelil do nohy.
Mně přijde Rko fajn až tak na desáty pohled, na první je spíš odpudivé ;)
Rko jako jazyk jsem schopnej překousnout, jeho záludnosti a divné špeky (jako třeba environments) jsem už jakž takž vstřebal, ale co mi vadí je, že je to jazyk spíš na ruční exploraci a fajn lepidlo pro knihovny (imho o něco lepší než python) . Ale nasazení experimentů přímo do produkce je buď strašně limitované/limitující nebo úplně nemožné. Mj. třeba kvůli strašně těžkopádné paralelizaci (opět to samý jako python).
...a právě tady vidím hodně prostoru pro Julinku. Kdyby se v ní dalo dělat ruční pokusy a pak zdrojáky víceméně rovnou hrnout do produkce, byla by to obrovská výhoda. Ještě to pak slušně napojit na Spark apod. (pokud nelžou zprávy o dobré integraci, tak by to snad mělo jít) a byla by to bomba. Jenom právě nevím, jestli je tohle realistický očekávání a za jakou dobu by se případně mohlo naplnit...
Takže proto by mě právě ten rozbor integrovatelnosti zajímal.
Hlavně ten multiple dispatch je celkem zásadní a měl by se to příště alespoň trochu zmínit. Julia nemá OOP a myslím, že když člověk potřebuje něco na ten způsob, tak se to dělá přes právě přes ten mutliple dispatch.
Jinak rychlost u nějakých trochu komplexnějších benchmarků prý odpovídá zhruba Go, což je určitě o řád lepší než Python, ale na C/C++, Fortran to fakt nemá.
Mala poznamka:
Ak hladate jazyk na pocitanie s lubovolnou presnostou, tak je to predchodca vsetkych skriptovacich jazykov tzv. "Restructured Extended Executor" alias REXX. Ti starsi si ho mozno pamatate aj z Amigy, ale v skutocnosti sa REXX zrodil a stale zije na IBM mainframe.
Samozrejme existuju minimalne 2 hlavne ditribucie pre rozne platformy:
http://regina-rexx.sourceforge.net/
http://www.oorexx.org/
Kto o nom REXXe tak https://en.wikipedia.org/wiki/Rexx
REXX ma decimalnu (nie float) aritmetiku s lubovolnou presnostou a to co tu niekto prezentoval vypocita uplne bez problemu
Napr.:
numeric digits 100000 say "2**700 = " say 2**700 say "2**7000 = " say 2**7000 say "2**70.000 = " say 2**70000
vychrli bez problemu vysledok
c:\Work>rexx power.rexx 2**700 = 52601359015483735072409898828801286655503398028231738594982809030687321542970808 22113666536277588451226982968856178217713019432250183803863127814770651880849955 223671128444598191663757884322717271293251735781376 2**7000 = 16216967556622020264666650854783770951911124303637432562359820841515270231627023 52987080237879446000465199601909953098453865255789254651320410702211025356465864 74315852270765993733408428427224200122818782600729310826170431944842663920777841 25099996860169436006660011209817579296678781962552377006552947572566780558092938 44627218640216108862600816097132874749204352087401101862690842327501724605231129 39552350590545442145547725095090965078894780946835929395741125694734386191215296 84847434440674120417402088754037186942170155022073539838122429925874353753616104 15934359455766656170179090417259702533652666268202180849389281269970952857089069 63755754143448760882483699419938024151975145101251270438290872809195384763028578 11854024099958895964192277601255360491156240349994714416090573084242931396211995 36793730129447956002483335707389983920299103223465980389530690429801740098017325 21069130797124201696339723021835300758978451952584855371088581956317370007438051 67411189134617501484521767984296782842287373127422122022517597535994839257029877 90770635533479024493543538666051259107956729143121629778878481855229281965417660 09803989979916814047493842157435158026038115106828640678973048382922034604277576 55073776567547507027144662263487685709621261074762705203049488907208978593689047 06342854853166866565732717466065818560906648495080127617546145721617695557519921 17507514067775104496728590822558547771447242334900764026321760892113552561241194 53870268029904400183858505767193696897593661213568888386800238409325673807775018 91470304962150996983853975207154939633923720287592041517294937079097785362510832 00928396048072379548870695466216880446521124930762900919907177423550391351174415 32973747930089955830518884135334798464113680004999403737245600354288112326328218 66113106455077289922996946915601858083982074170460683212438815202609958469658816 13758263829210295473438888321636271223029212297953848683554835357106034077891774 17026363656202726955437517780741313455101810009468809407811220573803353711246329 58916237089580476224595091825301636909236240671411644331656159828058372078343988 8562390892028440902553829376 2**70.000 = 12580458767788455347797853956075050016542418083594704593969019623048304218456164 44164771274078718146928993451682372699102894425761547484709440191049559671829879 03836506557519396227540403372000132136725017523173058955696778074394449999929487 27218426974295898725920259242568505977520522643138986500591318225650373914191920 93347178375753976435609268877865838638092042357456173963380889910938663168351539 07249045400267535223518173613565343335305339018067079075902544425074837366081342 22474390146687482345519493737837132907733499206156947893625688592582643850885214 65794979514727694104604194236526614458576088755647175826755434261139325355864220 87155780591470502959249812900570986444965757942155669634989245863280383568362309 38517593866390074217171706499064212040037090338954527056752533045899549299198230 56409867421100453470506686627583517942757317139598837695468930719456834892953750 03496933990489166050943976483744947546566382514804736439596895366336809909707037 52549547167396511959726914564505110646066199314228427878799326780054502539758137 96628666537259318862872878141540019003445116341039279323512256242267708994838622 14911680672720315319199136297451205931167968984478440152551296551900521013189832 02678272438569821126652044217476867245632738542075017029673592081887148698022124 48266227604849484033357524039773953390376432462151192271839323135217587077665459 07392934989702826706618656129683098479208345564179417418410918293150055752059129 04260861353968289191959976169310123238721813945451778372956395547381968310865982 52461896820330686416605387706005460673578238699826712036976725503270869345378811 58083398729211488869906433801760897986167517731349146390940835880452224347351265 20662253004270826103795137873727814869324306089534591327965663400435965579947766 36930956070817173646369174959390604108190411216837283162295853322882829317469086 22308381564296529383399076136985169020494498331402565744390363379712597871819216 73111022301352670861595018916364425934930588417005798414859224731241330505937882 69948991723419839191849269592743615909205530172389338797592699105059446515209240 61623278690849727761626542228720587663977956567614895571183859725996786896913255 98862990379306754212902433461330575508248129333381442392675257673874112356295720 01343958264112947994061850514657647900857130863602920534151052574159288387775213 44377671174222465994042817166732867181009298259177489581566456344226583195713188 76195116261161791309714428229942133101982746749380723548086840067492360978645838 50692788281575871055622465956089705480442631301287787234591207863741410227358042 63033738124991718760762224100362763702647903028133321253098270034132831255724710 61945793817644758514601449904844530887178800009570830887331326893232027029205109 27238844600900270108863027275376599449415560026731355361899528804482175152319621 88176613959065049277356820007239280778959658434985080616178488152627295558243033 62339117655921192891171839125866166028141981796536283482110871063882314018569494 68644205918402806292684679882546619859640016184140000983923019123625163625104579 26461665759017102670035494309990652250766029249204412091837243709851494878204969 53774995126768810142192608100004148102093039003320737835004013873804217605742485 41057025637852691027485277976842968527872510881350186983819621486134343373694143 68792778350351541536928320754365803757508255062861362695545021823599735690690266 97246611076420868708213321704340996341392374614510503249300836745788025082510278 32007047938531387305499901318062185779309026049319522453297072403916383332930535 30702000195844190821779625733797537314695901500176486368037529885038061766469675 27498486055477553910169225760217922914313184514302233501687924720533900090865770 31905851484717564587012717447940958471908563958722182735134253557830388642986637 12280378144364178297183154774569850036037668999977685549576520509979424544122050 52831296769893716669926989006247842924883197006895798589044410953480518777707954 55862843700058168562935193342099812321729620338863116776404478883918287727257496 57636342329220886972349171291885823355097871236374711777866791156799964152778687 85540665977981197309845144843875753165484265695335545060681850822413291211877580 00606163354837081049822110051179380811392964797650005437276486363900561591264223 03201928905467604681974504774135526804615698194467500998542878179483176341765608 12010330007210984406249837837460204217881727914164872574037566099052364948324564 65995634459111401163940662737647331255684876228576307792782591409380956532741952 85661408341746632839875291658744584240764748039835786016393024588143824451046481 91532228209575565414232273264179727506461867885610277308848191127759657433229709 01281846311728806334504151470646238818186813363522728643993088673646194455883869 03133027401629582336777088374008210913493974115278768205664002559571020932320571 52105781707827961722366972151863140441922985148881695325970897122116173700330407 35925379727096432187476661128786779367438885354906319421669843517932319289263963 01988069929166443312015320037567292540054300700820630033217072974990215902905939 05438934659925662510842896125389889338263596649848315835693821850235191247528227 13146740924213296157301584346475431107354878230825654986630402538631511651279550 56731284559849648852161886297480380396344181798148652679626719205843995157042379 92241191878837583711448919962923789056174324685833861331131087517855631937351518 37636823335766650029779610517100395829476065484641791052047850117655355900182042 80511751583892553856705505100331788550891335725143505452780440269970317427379312 48329734058505690239368655363314175014261562936789065057541438832905570327288968 73807108960578435400756768804139017875153996460266250413152859340028463200457277 17149345495637674854659048126341569054620561065233391789482397633616270389048280 44312893533478898560980812795277893362166163701104160342524509126990773497497620 80566821544724397453894268784530178899117716915572883098766312466550864130341551 17668775866746109698610952884264623136675948493270213726389989934167448522445553 45366919230272019340107306924247267908151685145498810032535630455577021660719542 77630200032110131607025890968963718815750693798776321464237695323387965481169894 70185604111634422528723857830252231370215388743228405526077666470322440102931206 20925778437532081419728195479647839476606752150815194142727228016849776931194690 75265434667203444109208722114915241910347867187421090552391519355327760352621129 58852519735866882726640785385798004112100018267098479646349110842823429765229706 85807821561885223351504743228831368323096849271010275827537735265520714601818860 13611952458338110652451912646689473948131129001085933778721098435986233131969518 97247127552361934616743559408282711051625478391495113412146167525389362828523799 32320258727791886710132975457162373501285581393748491332179704742006326487253499 93781310354789968583862311514468561979379051447429332342681978482533461593880310 91991879158263731951558583715901775151090488683985167241247044287899509208448799 45963496490639047890628941558300353981332428463961440528237770897247230896104474 48375914571138187998447955540941465175551372034013556415670641272446113166390692 88400484669735539635895853903055791665126334780394323915302861476471011060869857 90767735863323427492270724633755510798279794558821338749332961037033277140883137 85988545726910963888545596211512228501466997025771640029676313288209823930580642 88049824297956783973698092177833781716053989210487017993773132530034656853824849 96699523581523121101030678484185720565053721931387827320512856697562316433825900 96116707442763052243728861407398737726940511534019327843812478652337531793848035 74014667817200849909512720855278494348080599781062284393764573401791450884636894 06899360627302519718389782007045723796201045790216392103708431322165221946003242 48699478833568757620217635503102550343796033149846649076657149874209584838411243 87236513180251335846704770899513465620746390377000728094136057915520311089130108 53102577799864808751809963510010935844828497869123125921760098075094244813095242 07221107614643196234759917059209244672406785772941039183902938370259914763426208 60227770347127284622014196711036661748664438248624199903291646930465819808206107 61114553912457629056871715441781145804599711061214079531010911425330109353769558 46968472027862111621651038566948841431577205653439458953568497215726466936106987 10532637191281937572271124280626965745721019109293001052718542780643326771081515 04006752545967084294661263575678223653440962072690396073719403030084127502228518 02878688266803854950694780947377917198508844171806728120516777383430626588468447 14636598106597198358146224571406012643514949285046100819825594183219665005954362 96873763849684075336678384694025632858931603302717828117065569518707321654986285 60631287075073161680435300197883664835116845497102427710526926289192051761978474 53538318067401351484945689690036121788140028500597446246375698388215344187445892 15171210876004427716967444725370068927068761090136734535149170813760536897654646 62467974167478928155780915637500582552884055520168890433181633475325654172147625 28677824184965933092166358079654660294983833955172986485918922290531239902244785 30988065438532648432944148866243304765218387081396280942575918708176020230821789 45390971662440958707650943487483746898161085016119950001603476913079398941004206 12588251978291102879015010564553318365105290646119622988343461826528094024138248 66279134087224911158487552829421567429756447360128242915589211639240902094053927 15849483208240199228985112462418633777050099010585067292437563669480013959101954 57884885809177349069074135371975983950306799112910609210677515786583153083963435 56603578577501151522235863399363029411336220498966058976510390376515157819827179 28934056975954487987165021948764388071177183774904798292352670689171694384173825 66955444093210577278423918894511551358672905433905310401382566414169619805860026 64600201968794575651778590566752090489064909395329889244823345042619652822816390 92101775724305693295864450491906942712502246966893953599859331407683665289849384 24028646131527124207273450205708948835565932664206072386534785354428463426891686 32511574824968533969773499288020088930115424224732396060988195668998400290950661 40513961466664418932893931925671924889366666032251869472581357613149368963673466 17207227418430803762460655443595418840876506520825396460927848413149034764513650 46542080629760217399988619705840372963813380362596128124872067656398790256614390 32617319149194228539620117487797166539440285174523244172419551186664635281054635 81012039364970249873272963498630554887026796309475967195714192655250359752322660 52951553654029601737123796661124947109171299879264252933824882572612102142799840 82490681449298422564330756073157069066478482694457609428189725611267023023163779 17185709917136284959671179189866246098472854542680206921851769792311018562281466 54246548621243196131719965190524776776641232833386961971435978579872978183858833 54632062568863915033432692028804038462082222002584115302880701396387844761711094 55565400408063372095694760042740976037196748959640657392618469671087167939998853 56365349395411145943023788674740751649913695709776897638874836747681051314953312 19416028506358710984442917626036041243027255003783816765038449161366803008836512 16566162100855847075129406841342894374272974674305726177893479320857172155489934 39143351477144139992043507914363332495763581424764441751402009668438771996802954 66955079642704179018848005269580253290600112484650181289727356121433188831549223 59876866622961559106965225499065368455257344362388768397670465822292087331336241 08330700334347171474005635759122985824698424498354787707864341705979327144592017 82030479100522773771534555119141944275707159512493919207019341314172553643024783 36273205785509015306885425222680760772784357694454026134548068210257668540682659 60396116380812298668287953275355696084152382962567152876901078363238059103516272 05159895683964993946860352543147457849948132804507293009233775087820708125047618 63737105318714695673256499836470481379371138572063391863945604003741147404681322 02844623210738329012274916407523341043622572573516582282341244946544816710314425 46871573407077762934553141093773342408916813236601425245999419034125973285407889 57480869152538367361414245480369431249715351250775087381115580445418656415141437 74078516306227421849612975289064137167535124876663304989281163173794330912597307 47836555616107994065480908876166871221398192335591517980425857809846226427721626 11153962161018497380494955188494098920966762094565952619497537372394268456915375 03472029834471404470722946649391871310420523651910876484827574314297830159617233 23752675711885171956282790007042799486960988389798703604068936608827130048833592 46313014097858996162367339102940973521902818448310027330748097336830433487070240 39993625535801688538110750245749433768430715199599265512563666027806444745894578 66200776289094707619443999340228513701352157812233646931787242059228233190473927 38990733780478181523930078442538334671511209079512668148478532510687296301519058 31939492606929127629496039175867307892191708482222376469192646687678561009601411 89409987881570160655213325038125014134984562649682940749060026954160483016678429 77990778968905420615408498685408441719961129920278628649894059215432644581657456 99880749127167767144275224837975682149145018689459594928572455097260002762367669 86556127786451172953318429757975862589868535669979662756476609213182976749299811 89887728391756981498027459474689047848618302257572438966322214842041068353390776 10957562335272142394283635813827172131984974820883281624544902291446661007705053 73193746347512522974054556634718381761982640605842224291568588986736678497440467 25149651827270905701177798179278353188144325828499281031264782933389942456668910 68376625652395534547302085997947706711528515499713565422511398427294067775561592 52999724418237892485409668975844542081024793356737755698156320701648264950832747 59909974031188234104483638653169702295102657206348578806092054815029303565155891 99111910146394039580934202995394904200350652162173791988461324422574608372787402 10031942821255870374300905932362240818507446645959101113415893472116643812138203 07520589597809366214656448380437595891376301604129156190966710113240965871021124 36736411590093200085905235234911264926216800400260955633772169970073864108136362 34816265750050430086097335603647537688829919220027636084861567377881246411746279 40456762431959533882411916763617287235016592489684765614645790296343555150739811 07421551242495367783575580429876548167476916225501861505690088934411007927366686 42448418296200742365659758922005963530373012724737711017783238999505577996929481 46590064157441885454353164161881043727991450139016299352656923950855903891488907 28389364692915540157121523867501257264930675452137347225041074358945839288290502 57713268986113346743541017941927764575566785384488787751854542327692126797386227 59826908724689036953572790572510893095633900185636015769604650067426301046673275 92909588514050528436507074352495762677248694384276456907469017939787631591750309 75389469858259927464825698773345562101320953715746875510297031277790333303440006 33592756118715252417953598311343239897478324492112491477208077813681350616142474 81146854888586018662682239082918142022371804097148232845517499414106762754277758 01165482572392674753438251226617553202980147341970237230705061407756243205781717 22660776340070169695538068985651037845921219949645025829611976020000626043698723 42781787592560326292165258439639470859770375343288537708106588228441238196852286 35817578104978829723469675703745877661144009425022879038252776165585186170275515 36833703862262024688752975429331443996963881244386767583372165392419620649557937 35613825843304762528669463546461172550951654213651981363884621739870577818861036 10102230199553267220375437279518589122889000676388813973917214232159128944015738 63756047306326293833650435854131587694213225981221297431625499907944441891895847 14124440126547144863641067799530941128917956842023233551896240611208047726806220 33384974550381692958712898690556656154162160613913732491765266321058163862539364 24159837951792791852310294950663727351272251391802307893222925167278387109488499 79256033392686669651313760283947884106457168728945605442967170737979423104520568 95031266042872553303624165682655366934436581041530704155765327744872515409345550 90487414011920100728659367975384619725129479873821334497735189444108763693630445 70017286360417941761430383907038665161240713017960609745125722519699706994070684 93470545140035969849322179931498537274111414603685454449387812030216724162805738 48573314970886423305180403604162673085015912103797644113624114057197598739020724 26251924943763841540140657732297515135995809641610774228266167496173481770678521 86054805239917140316453200186015827329601614598906012439822409338566054597707660 98102727954533554271880373645378158096471679241652978943800325449989020860826501 30162208386164401896643504225380741414966336235446703466737246856673954225133477 54105352125429758663399129007000139688260940993535398554709481764880913788599813 28786784128919182335879076054712706903368642097493809586536146935928321135623339 32667421746661151830223376586345453167336607616530914788562058066968300093879101 73354308910539951514827828935232113928562371982148457087461181576284311864483905 64721230938194875669331284881246579305458565738224058415748102470676040201877950 74359249536381856045288138269533028256015602597439090488938700292874762843113463 93465585442514194629349580885727338756116549003128509048187323366275280372517431 96515131952703569170593290515662079136240837987262453516808060083844039356305389 84487526765122169318944674024276466003523078209501234292267945300964204758464558 92396003505408450860171984270537676733651788154450205975479260151554486522851481 37613563642569035597251512620394486158929709190158305040901365136347900227707126 04945924723166470283596665186711124311924459280494901379502201537385578207244303 34016131607851552318413292153756353144863187722715295572606936918106111950681529 52857422869690194538565419485139258518719623807935522965521063985744514437992308 64752959971747620336905323437397500452828942286576255821719091010869128342246892 60139993014317492529853546719784817357931981283896334358565346600040781212147254 48661985211565871244314436298454871408171850617329974973479046257754547691414345 11499675342931333975376287435491676335989066146723117812879140651022627041378946 93674944856014435142695792641518929007591381809457092076446991678760946724131090 79681419071675240093012398752785310263181914731702713952945288630575254587992928 08936934701215617810707609335912533515859709801137858505444885576880619078322230 87898789951235766461605515660691526253251326110603843050910337471629182536954571 83938188112290189434206482504445819402391203337937552875366759908713506393224453 17222356844655925544854078528114050618610849508288301104792255056313786697717008 36675318869178889546728729407996557330447387822526030960508906228323825351268756 86316927196290767674884639342201995981125222489780220617819681496634075341538326 97663848333449470998385867351487598202912747143139175451117365839248273044597346 87237328323720881278572559440890843903091559308960781397757803048034651420796386 93983203792468651299227142668685112536675964342860014097357449225374807442653565 19293033606300787302633528716239478195264079506002573283743086909601448841009048 16592404702238904272087786125311311264630233521084963178182867537601073893559191 12971769741448459933957617732285644142431819977760523123859773348560292052924304 93905271875636491801931576397378458640218643946400806050055309157604108761691299 34965887786554739036515057834379809560587985912385180460784856782739651527181853 45836082382071402819833538075370511045567401145057833297717816326054417602038383 07110772077663224570526164995296270802854474118981217030199621575074440666902380 37492637159073395318437992771879115558265206061906479154469415497489889208860638 49546058704716777792787497233034499103757956360856568735618650955696222439509381 65201914597289903947792917825494238209663076641916741068878065437847277987336539 98776659745383722721207988601159447709650263316398024373157203003170808331435181 67827187548693375957038788945389083954501985991325905528670617404365319756236688 44738378193281732198833640637104827546230294566845082416040902370407071677568808 81943409442085893833501719039498459499169416496077302156192624046016149987132940 59637515859583423038856249437131961670701353053659681720499485566433557641342283 45271072439142200649775256397363175524130356204520698424522752327961737767330328 51365745261584374222322090593220176056145689301955036099284438234306676851988471 50707338472437776167527595277660602342463822735523462506953690429706232753101855 58845262758667281467484939221230582634910974232701210874018340870320018067413530 84550632318721230116646698079931558197269245547195386000889444336876644657431350 55747683755635356182448358797404987867430997865025894928749107480582305792992544 29017748347850957671637527751590343847736249507005291454759672284696345991761937 66361025651027127971222619435853717326290819886195295959938359934310662249201299 562149291526592554188417454309376
Decimalna aritmetika pocita zlomky s lubovolnou presnostou, napr.:
rslt = 1/6 say "1/6 with" DIGITS() "digits precission:" rslt = 1/6 say rslt say NUMERIC DIGITS 31 rslt = 1/6 say "1/6 with" DIGITS() "digits precission:" rslt = 1/6 say rslt say NUMERIC DIGITS 66 say "1/6 with" DIGITS() "digits precission:" rslt = 1/6 say rslt
da vysledok:
c:\Work>rexx precision.rex 1/6 with 9 digits precission: 0.166666667 1/6 with 31 digits precission: 0.1666666666666666666666666666667 1/6 with 66 digits precission: 0.166666666666666666666666666666666666666666666666666666666666666667
Dokaze toto aj Julia ? Ospravedlnujem sa - ale este som si ju neinstaloval:-)
Mimochodom REXX nie je jazyk specializovany na matematiku, ale je to univerzalny skriptovaci jazyk.
REXX ma jednu unikatnu vlastnost, ktoru som nenasiel pri ziadnom aktualnom skriptovacom jazyku a to je, ze vsetko co nie je prikatom REXXu odosle na aktualne nastaveny environment, co moze byt OS, databaza, alebo nejaky iny interpret prikazov. Takze spravis skript v REXXe, ktory sa iba prepina napriklad medzi environmentom OS a databazou a odosiela do OS systemove prikazy a do databazy SQL prikazy a vyhodnocuje vysledky a spracovava ich.
Ja ho pouzivam napr. na spracovanie textu a ako glue-language medzi OS/400 a databazou DB2.
Na Windows som ho pouzival tiez, pretoze Windows ma hrozne slaby prikazovy jazyk, ktory sa pouzitim REXXu stal pouzitelny.
Myslim, ze Julia nejaku prevratnu dieru do sveta nedokaze urobit.
Matlab, Scilab, Octave su na numericke vypocty
R je na statistiku
Maple, Mathematica a Maxima su na symbolicke vypocty
Co moze ponuknut Julia ?
Asi nic nove, pretoze na glue language tu mame zauzivany uz Python (Numpy alebo SciPy)
A aj tak ten, kto sa vazne chce zaoberat numerikou, musi vediet Fortran a/alebo pripadne C/C++.
Prosim neplest do toho Maple ani Mathematicu, aspon ne tady na rootu :) Jako hlavne Mathematica je fajn, ale ne kazdy si to muze dovolit (a co jsem videl, mnohdy jsou to vyhozene penize, ano mluvim o statnich institucich, kde se toho nekdy nakoupi mraky a da se to snad kazde uklizecce :)
Ten nadpis je brany s nadsazkou, proto taky otaznik na konci ;-)
Kolik lidi (navic v %) to pouziva se asi tezko zjisti, protoze se v Julii delaji mj. i kratke skriptiky, ktere navic nejsou OS, takze treba OpenHub to nezjisti (ostatne to plati i pro R/Matlab atd.). Navic jazyk s pouze ctyrletou historii to bude mit zpocatku tezke. Tento jazyk nema byt konkurenci k Fortranu, ale prave k Rku, Octave nebo Numpy a SciPy, tam to podle me dost dava smysl.
PS: co se tyce penetrace, tak zrovna ja na ni moc nedam; vetsinou se snazim programovat v necem, co neni uplne mainstream (Forth, dneska nejvic Lua a Clojure) :-p
Svět potřebuje nějaký jazyk pro 21. století, který nahradí to ZOO nestvůr, které tady máme v současnosti (tím myslím Javu, PHP, Python, Perl, Lisp, ASP/C# a další). Navíc idea bytekodu a (povinných) virtuálních strojů se podle mého názoru ukázala jako špatná - proto C/C++ stále kraluje a to asi není nejlepší vizitka.
Má Julia smysl, vyřeší problémy současných jazyků?