abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 18:22 | Nová verze

    Byla vydána verze 0.2.0 v Rustu napsaného frameworku Pingora pro vytváření rychlých, spolehlivých a programovatelných síťových systémů. Společnost Cloudflare jej letos v únoru uvolnila pod licencí Apache 2.0.

    Ladislav Hagara | Komentářů: 0
    10.5. 19:11 | Nová verze

    Open source RDP (Remote Desktop Protocol) server xrdp (Wikipedie) byl vydán ve verzi 0.10.0. Z novinek je vypíchnuta podpora GFX (Graphic Pipeline Extension). Nová větev řeší také několik bezpečnostních chyb.

    Ladislav Hagara | Komentářů: 7
    10.5. 04:11 | Nová verze

    Rocky Linux byl vydán v nové stabilní verzi 9.4. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    9.5. 22:22 | Bezpečnostní upozornění

    Dellu byla odcizena databáze zákazníků (jméno, adresa, seznam zakoupených produktů) [Customer Care, Bleeping Computer].

    Ladislav Hagara | Komentářů: 17
    9.5. 21:11 | Zajímavý článek

    V lednu byl otevřen editor kódů Zed od autorů editoru Atom a Tree-sitter. Tenkrát běžel pouze na macOS. Byl napevno svázán s Metalem. Situace se ale postupně mění. V aktuálním příspěvku Kdy Zed na Linuxu? na blogu Zedu vývojáři popisují aktuální stav. Blíží se alfa verze.

    Ladislav Hagara | Komentářů: 32
    9.5. 14:33 | Pozvánky

    O víkendu 11. a 12. května lze navštívit Maker Faire Prague, festival plný workshopů, interaktivních činností a především nadšených a zvídavých lidí.

    Ladislav Hagara | Komentářů: 0
    8.5. 21:55 | Nová verze

    Byl vydán Fedora Asahi Remix 40, tj. linuxová distribuce pro Apple Silicon vycházející z Fedora Linuxu 40.

    Ladislav Hagara | Komentářů: 20
    8.5. 20:22 | IT novinky

    Představena byla služba Raspberry Pi Connect usnadňující vzdálený grafický přístup k vašim Raspberry Pi z webového prohlížeče. Odkudkoli. Zdarma. Zatím v beta verzi. Detaily v dokumentaci.

    Ladislav Hagara | Komentářů: 7
    8.5. 12:55 | Nová verze

    Byla vydána verze R14.1.2 desktopového prostředí Trinity Desktop Environment (TDE, fork KDE 3.5). Přehled novinek v poznámkách k vydání, podrobnosti v seznamu změn.

    JZD | Komentářů: 0
    7.5. 18:55 | IT novinky

    Dnešním dnem lze již také v Česku nakupovat na Google Store (telefony a sluchátka Google Pixel).

    Ladislav Hagara | Komentářů: 10
    Podle hypotézy Mrtvý Internet mj. tvoří většinu online interakcí boti.
     (64%)
     (8%)
     (13%)
     (16%)
    Celkem 160 hlasů
     Komentářů: 11, poslední 10.5. 18:00
    Rozcestník


    Vložit další komentář
    mkoubik avatar 3.9.2007 00:23 mkoubik | skóre: 5 | blog: lorem_ipsum | Praha 8 - Bohnice
    Rozbalit Rozbalit vše Re: buga, ale funguje
    treti kolo souteze: na kolik radku by to bylo v pythonu?

    To neexistuje nejake elegantnejsi reseni jak v cecku dynamicky menit typ promenne? Nehlede na to, ze takova struktura zabira v pameti misto za oba typy + rezije.
    3.9.2007 01:05 Martin Tůma | skóre: 39 | blog: RTFM | Praha
    Rozbalit Rozbalit vše Re: buga, ale funguje

    To, že tu režii u pythonu nevidíš, ještě neznamená, že neexistuje... I python si za běhu musí někde pamatovat, co těch N bytů na dané adrese v ten který okamžik vlastně je. A režii při konverzi typů má jakbysmet.

    Každý má právo na můj názor!
    3.9.2007 03:38 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: buga, ale funguje
    IMHO je to ještě horší: Python si to musí pamatovat i v případě, že proměnná svůj typ nemění (co kdyby), na rozdíl od céčka, kde tu režii použijeme jen tam, kde je opravdu k něčemu dobrá.
    3.9.2007 01:09 trekker.dk | skóre: 72
    Rozbalit Rozbalit vše Re: buga, ale funguje
    Nehlede na to, ze takova struktura zabira v pameti misto za oba typy + rezije.
    Je to union, takže nezabírá místo za oba typy, ale jenom za ten větší.
    Quando omni flunkus moritati
    3.9.2007 00:59 ::: | skóre: 14 | blog: e_lama
    Rozbalit Rozbalit vše Re: buga, ale funguje
    pokud to spravne chapu, tak:

    get_number(foo) = 42
    get_number(bar) = 42.0

    takze radek s vypisem:

    printf("%s\n", 42 == 42.0 ? "Wow, it works" : "Oops");

    jasne ze to funguje. Nevidim jedinej duvod proc by nemelo...

    3.9.2007 01:05 disorder | blog: weblog
    Rozbalit Rozbalit vše Re: buga, ale funguje
    pretoze float nie je int (uklada sa inym sposobom).

    ale to neplati pre vsetky cisla, pre 42.0 to ide aj pre ine cisla -- ale taky 3221333323.0 je uz ina kava...
    3.9.2007 01:30 ::: | skóre: 14 | blog: e_lama
    Rozbalit Rozbalit vše Re: buga, ale funguje
    protoze 3221333323 se do int-u nevejde a pretece. To ale imho neni chyba pri porovnavani, ale chyba je neco takovyho do intu vubec cpat...
    3.9.2007 01:45 disorder | blog: weblog
    Rozbalit Rozbalit vše Re: buga, ale funguje
    a co:
    #define INT     (1)
    #define FLOAT   (2)
    
    struct object {
            int type;
            union {
                    int num_int;
                    float num_float;
            } value;
    };
    
    #define get_number(x) (x.type == INT ? x.value.num_int : x.value.num_float)
    
    int main(int argc, char ** argv)
    {
            struct object foo, bar;
            foo.type = argc; /* INT */
            foo.value.num_int = 22133335;
    
            bar.type = argc + 1; /* FLOAT */
            bar.value.num_float = 22133325.0;
    
            printf("%s\n", get_number(foo) == get_number(bar) ? "Wow, it works" : "Oops");
            return 0;
    }
    
    $ make bug
    cc     bug.c   -o bug
    bug.c: In function ‘main’:
    bug.c:23: warning: incompatible implicit declaration of built-in function ‘printf’
    $ ./bug
    Oops
    
    3.9.2007 02:33 disorder | blog: weblog
    Rozbalit Rozbalit vše Re: buga, ale funguje
    sorry, tam tom to preklepol, rozne cisla :D
    3.9.2007 02:13 disorder | blog: weblog
    Rozbalit Rozbalit vše Re: buga, ale funguje
    ozajstny problem je, ze "pretece" float...
    3.9.2007 02:28 disorder | blog: weblog
    Rozbalit Rozbalit vše Re: buga, ale funguje
    teda minimalne v mojom testovacom programe, ten prekladac se sakra dobry...
    3.9.2007 03:02 Deleted [8409] | skóre: 14 | blog: darkblog
    Rozbalit Rozbalit vše Re: buga, ale funguje
    ale pri porovnavani se typy implicitneprevedou.
    (4.0000000000000000000000000000000000000000000000000000000001 == 4) -> true
    3.9.2007 03:07 Deleted [8409] | skóre: 14 | blog: darkblog
    Rozbalit Rozbalit vše Re: buga, ale funguje
    a druha vec je ta, ze pri takovem makru musi prekladac vratit jen jeden typ, takze vam toto makro bud vraci neustale float nebo int (ted se mi nechce zkouset, ale rekl bych ze zvoli float:-) )
    3.9.2007 03:17 disorder | blog: weblog
    Rozbalit Rozbalit vše Re: buga, ale funguje
    lenze tu ide o velmi vysoke cisla, ktore float dokaze pojat a nema tam kontolu nad rozlisovanim v rade jednotiek (ma len mantisu a exponent), ale neviem ci sa tak deje uz rozsahu 32-bitoveho signed intu
    3.9.2007 03:27 Deleted [8409] | skóre: 14 | blog: darkblog
    Rozbalit Rozbalit vše Re: buga, ale funguje
    ale jak jsem psal vyse:
    #define get_number(x) (x.type == INT ? x.value.num_int : x.value.num_float)
    
    toto makro vrati vzdy stejny typ, takze vrati bud vzdy int, nebo float (vraceny typ tedy neni zavisly na x.type a ani z logiky veci nemuze byt, hodnota je vzdy prevedena)
    3.9.2007 03:50 disorder | blog: weblog
    Rozbalit Rozbalit vše Re: buga, ale funguje
    heureka :)
    3.9.2007 03:52 disorder | blog: weblog
    Rozbalit Rozbalit vše Re: buga, ale funguje
    inac to je zjavne, ze prekladac netusi na co je ten type, ale ten prevod... ake jednoduche
    3.9.2007 04:24 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: buga, ale funguje
    Podle pravidel implicitních typových konverzí by to měl být double.
    3.9.2007 01:20 Sinuhet | skóre: 31
    Rozbalit Rozbalit vše Re: buga, ale funguje
    Mate tam chybu, spravne je:
    get_number(foo) = 42.0
    get_number(bar) = 42.0
    3.9.2007 01:34 ::: | skóre: 14 | blog: e_lama
    Rozbalit Rozbalit vše Re: buga, ale funguje
    diky za opravu.

    na funkci to nic nemeni: 42.0 == 42.0 taky plati...
    3.9.2007 09:52 Sinuhet
    Rozbalit Rozbalit vše Re: buga, ale funguje
    Na funkci to sice nic nemeni, ale je to dost podstatny detail. Mimochodem, uz nekdo vi v cem spocival onen bug?
    3.9.2007 14:04 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: buga, ale funguje
    v tomto pripade prekladac minimalne tusi ze by mel udelat implicitni konverzi.... (btw. takove porovnani je zdrojem mnoha oblibenych chyb)

    v tom mem pripade je to slozitejsi o ten prvek ternaniho operatoru, kdo prekladac by mel byt ve fazi nevime nic... a minimalne by mel vratit warning
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    3.9.2007 02:42 disorder | blog: weblog
    Rozbalit Rozbalit vše mne sa sniva
    mas odomna zakaz pisat blog o polnoci
    int main(int argc, char ** argv)
    {
            struct object foo, bar;
            foo.type = argc; /* INT */
            foo.value.num_int = 13133325;
    
            bar.type = argc + 1; /* FLOAT */
            bar.value.num_float = 13133325.0;
    
            printf("%s\n", get_number(foo) == get_number(bar) ? "Wow, it works" : "$
            printf("%d %f\n", get_number(foo), get_number(bar));
            printf("%f %f\n", get_number(foo), get_number(bar));
            return 0;
    }
    
    $ ./bug
    Wow, it works
    14 13133325.000000
    13133325.000000 13133325.000000
    
    3.9.2007 02:45 disorder | blog: weblog
    Rozbalit Rozbalit vše Re: mne sa sniva
    sed -i 's/\$/Oops\"\)\;/'
    3.9.2007 03:14 Elwood
    Rozbalit Rozbalit vše Re: mne sa sniva
    A to je sopuštěno na jaké architektuře. U mě na PC jak GCC tak Visual Studio 2005 hází výstup
    Wow, it works
    -1610612736 -0.000000
    13133325.000000 13133325.000000

    A na školním SparcV9
    Wow, it works
    1097403585 -0.000000
    13133325.000000 13133325.000000 :-)
    3.9.2007 03:19 disorder | blog: weblog
    Rozbalit Rozbalit vše Re: mne sa sniva
    problem na ktory poukazujem je vyznaceny boldom -- cislo, ktore ma byt int je float (?!?). je to x86_64
    3.9.2007 03:55 disorder | blog: weblog
    Rozbalit Rozbalit vše Re: mne sa sniva
    http://www.abclinuxu.cz/blog/show/192147#23

    tady neni nic k videni :)
    3.9.2007 03:23 disorder | blog: weblog
    Rozbalit Rozbalit vše Re: mne sa sniva
    btw nemas nejake zmenene argc, to snad nie je mozne

    ma to prestava bavit, je neskoro, uz mi to ani nemysli
    3.9.2007 19:32 marbu | skóre: 31 | blog: hromada | Brno
    Rozbalit Rozbalit vše Re: mne sa sniva
    Nechápu, proč se v druhém řádku toho výpisu zobrazí -0.000000 místo 13133325.000000, když o řádek níž je to správně. Jediný rozdíl je v tom "%d …", ale to má mít přece vliv jen na první parametr fce printf…
    A když v tom kódu nahradím 13133325 za 42, tak se to taky chová divně(i686, gcc (GCC) 4.2.1):
    [martin@dione buga]$ ./buga
    Wow, it works
    0 0.000000
    42.000000 42.000000
    
    Zkoušel jsem to kompilovat s gcc ještě na dvou jiných strojích(AMD64 a někaký MIPS) a tam je ten druhý parametr správně … že by bug mého gcc? ;)
    There is no point in being so cool in a cold world.
    4.9.2007 16:46 2007
    Rozbalit Rozbalit vše Re: mne sa sniva
    %d ma vliv na pocet bytu co se sezerou ze zasobniku
    4.9.2007 17:38 disorder | blog: weblog
    Rozbalit Rozbalit vše Re: mne sa sniva
    lenze int aj float ma rovnaky sizeof. v kazdom pripade by to podla mna va_arg nemalo robit problem
    3.9.2007 10:54 MJ | Tady a teď
    Rozbalit Rozbalit vše Re: buga, ale funguje
    Huh? Tady by měla být nějaká chyba? ;-)

    Já bych řekl, že je to zcela korektní program, který otestuje, zda (double)42 == (double)42.0F.
    vencour avatar 3.9.2007 11:12 vencour | skóre: 56 | blog: Tady je Vencourovo | Praha+západní Čechy
    Rozbalit Rozbalit vše Re: buga, ale funguje

    Profesiální programátor nejsem, ale pamatuju, že dvě reálná čísla nelze porovnávat ... vzhledem k reprezentaci dat v počítači ... takže taky čekam na vyjevení pravdy svaté :-)

    Ty nejhlubší objevy nečekají nutně za příští hvězdou. Jsou uvnitř nás utkány do vláken, která nás spojují, nás všechny.
    5.9.2007 09:18 MJ | Tady a teď
    Rozbalit Rozbalit vše Re: buga, ale funguje
    Dvě reálná čísla lze porovnávat, jen to nemusí vždycky znamenat to, co od toho člověk na první pohled čeká :-) Může se totiž velice snadno stát, že dva výrazy, které v opravdových reálných číslech dají identický výsledek, ve floating-point reprezentaci dají výsledky maličko jiné, jelikož se zaokrouhlovací chyby zkombinují různě.

    Pokud máte zaokrouhlovací chyby pod kontrolou, může být porovnávání floatů na rovnost bezpečné. Jako třeba v našem případě: (double)42 == (double)42.F by neplatilo jen tehdy, kdyby float neměl dostatek přesnosti na zcela přesnou reprezentaci čtyřicetdvojky, a to není pravda. [Tedy úplně striktně vzato, z normy to neplyne, ale sotva existuje stroj, který by používal takové floaty.]
    3.9.2007 14:01 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: buga, ale funguje
    tak konecne se muzu zapojit do diskuze... problem, je ze ternarni operator by mel vracet jenom jeden typ... coz v tomto pripade, programator nechce... a prekladac si nejak sam od sebe provadi implicitni konverzi na float i kdyz tam ma int, coz on vlastne ani nemuze vedet...

    napr. v jave by takovy kod asi nesel zkompilovat bez explicitni konverze
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    3.9.2007 14:09 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: buga, ale funguje

    Proč by to nemohl vědět? On přece ví, že foo.value.num_int je typu int a foo.value.num_float typu float, protože jste mu to tak nadeklarovat. Takže tam máte podmíněný výraz, kde je jeden operand int a druhý float, proto se vám podle standardních pravidel oba konvertují na double a výsledek je double. Je to přesně totéž, jako když napíšete

      int i = 1;
      float f = 0.5;
      result = i + f;
    

    kde proměnná result bude nějakého číselného typu.

    3.9.2007 14:26 disorder | blog: weblog
    Rozbalit Rozbalit vše Re: buga, ale funguje
    no, mne zda sa gcc (to makro) bez akehokolvek ostychu vracia float
    3.9.2007 14:46 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: buga, ale funguje

    Makro nic nevrací, to není inline funkce. Makro vyhodnotí už preprocesor a překladač místo něj zpracovává výsledek expanze. Takže přes všechnu mlhu to není nic jiného, než kdybyste napsal

      int i = 42;
      float f = 42.0;
      if ((b : i : f) == (!b : i : f)) ...
    

    Protože druhý a třetí operand operátoru ?: jsou různé, provede se implicitní typová konverze obou na double, stejně jako kdybyste tam místo 'b : i : f' měl třeba 'i + f'. Takže nakonec jde jen o to, zda platí

      ((double) 42) == ((double) 42.0)
    

    Což podle platformy a překladače někde platit může a jinde ne.

    3.9.2007 15:37 disorder | blog: weblog
    Rozbalit Rozbalit vše Re: buga, ale funguje
    1) makrom myslim obsah makra, ktore sa dosadzuje (samozrejme, duh)

    2) co znamena (b : i : f) ?

    3) naspat tematu -- mne dava float

    4) get_number(foo) => siezof = 4, printf("%d", ...) vrati nezmysel

    uz sa rozumieme, alebo este treba nieco vysvetlit?
    3.9.2007 17:01 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: buga, ale funguje
    Samozřejmě tam má být 'b ? i : f', b je nějaká proměnná typu int.
    3.9.2007 19:13 Marcel Šebek | skóre: 21 | blog: c
    Rozbalit Rozbalit vše Re: buga, ale funguje
    Mě to taky vrací float. Aspoň podle tohoto to tak chápu, že pokud operátor dostane float a int, výsledek je float.
    Real programmers don't comment their code. If it was hard to write, it should be hard to read.
    3.9.2007 19:37 disorder | blog: weblog
    Rozbalit Rozbalit vše Re: buga, ale funguje
    ale tu Mr. Kubecek tvrdi, ze by tam mal byt double
    3.9.2007 20:54 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: buga, ale funguje
    To tvrdí pánové Kernighan a Ritchie. Ale je možné, že to pan ISO později změnil. :-)
    3.9.2007 22:06 disorder | blog: weblog
    Rozbalit Rozbalit vše Re: buga, ale funguje
    ja to nespochybnujem, bolo by celkom logicke, ze sa pouzije typ, ktory pojme vsetky mozne hodnoty

    ...ale nejak mi to nefunguje?
    michich avatar 3.9.2007 22:53 michich | skóre: 51 | blog: ohrivane_parky
    Rozbalit Rozbalit vše Re: buga, ale funguje
    Nemyslím, že by K&R tvrdili něco o tom, že při použití int a float v operátoru bude výsledek double. Máš nějakou citaci? Podle ANSI to bude určitě float. Nepleteš si to s konverzemi při volání funkce bez prototypu nebo při předávání parametru na místě výpustky?
    3.9.2007 23:17 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: buga, ale funguje
    Väčšina operátorov vykonáva koverzie a produkuje typy výsledkow podobným spôsobom. Tento postup budeme nazývať obvyklé aritmetické konverzie.
    • Naprv sa kažký operand typu char alebo short konvertuje na int a každý operand float sa konvertuje na double.
    • Potom ak je niektorý z operandov typu double, druhý sa konvertuje na double a výsledok je typu double.
    • ...

    (Programovací jazyk C, 2. vydanie, Alfa 1989, příloha A, sekce 6.6)

    Ale co jsem se díval do aktuální ISO specifikace, podle ní by to v tomto případě měl opravdu být float. Kam to ten svět spěje, když už člověk nemůže věřit ani autorům jazyka… :-)

    3.9.2007 19:40 marbu | skóre: 31 | blog: hromada | Brno
    Rozbalit Rozbalit vše Re: buga, ale funguje
    No, zkuste do toho kódu na konec přidat:
    printf("%d %f\n", get_number(foo), get_number(bar));
    a pak to takto přeložit:
    [martin@dione buga]$ gcc -std=c99 -pedantic  -Wall   buga.c   -o buga
    buga.c: In function ‘main’:
    buga.c:28: warning: format ‘%d’ expects type ‘int’, but argument 2 has type ‘double’
    [martin@dione buga]$ 
    
    Je tam z té chybové hlášky pěkně vidět, zě se mi to přetypovalo na double…
    There is no point in being so cool in a cold world.
    3.9.2007 19:48 disorder | blog: weblog
    Rozbalit Rozbalit vše Re: buga, ale funguje
    ano, -Wall to pise aj mne, ale sizeof mi vracia 4
    3.9.2007 20:29 marbu | skóre: 31 | blog: hromada | Brno
    Rozbalit Rozbalit vše Re: buga, ale funguje
    hmm,mě taky. Takže to vypadá že máte pravdu a že je chyba v tom varování (a nepoučím se a nepoučím - viz moje patička;-) ).
    There is no point in being so cool in a cold world.
    3.9.2007 14:41 Sinuhet
    Rozbalit Rozbalit vše Re: buga, ale funguje
    No pokud dobre ctu standard, tak vysledkem bude float.
    3.9.2007 14:47 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: buga, ale funguje
    Do standardu bych se musel podívat, ale Kernighan a Ritchie tvrdí že double.
    3.9.2007 21:04 Deleted [8409] | skóre: 14 | blog: darkblog
    Rozbalit Rozbalit vše Re: buga, ale funguje
    Popravde receno ja nevim:-) Mozna by to chtelo zkusit neco jineho nez printf:
    printf("1:%d 2:%d 3:%d\n", 1.1f, 1);
    
    Prvni dve cilsa budou nesmysly, ale to treti bude 1, protoze float jako variabilni parametr se vzdy prevede na double (takze jeho velikost obsadi ty prvni 2 parametry u platforem kde double=8 a int=4)
    3.9.2007 21:29 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: buga, ale funguje
    Obávám se, že takhle to nezjistíte. Abyste to zjistil "zvenku", budete muset tu hodnotu někam přiřadit, a tím ji přetypujete na typ toho, kam ji přiřazujete (taková programátorská Shrödingerova kočka :-) ). Takže spíš udělat překlad do assembleru (s vypnutou optimalizací) a podívat se, co z toho vyleze.
    3.9.2007 22:28 Sinuhet | skóre: 31
    Rozbalit Rozbalit vše Re: buga, ale funguje
    Taky se da vyuzit c++:
    #include <iostream>
    
    template<typename T>
    struct test
    {
            static const bool is_float = false;
    };
    
    template<>
    struct test<float>
    {
            static const bool is_float = true;
    };
    
    template<typename T>
    bool is_float(T)
    {
            return test<T>::is_float;
    }
    
    #define INT     (1)
    #define FLOAT   (2)
    
    struct object {
            int type;
            union {
                    int num_int;
                    float num_float;
            } value;
    };
    
    #define get_number(x) (x.type == INT ? x.value.num_int : x.value.num_float)
    
    int main(int argc, char ** argv)
    {
            struct object foo, bar;
            foo.type = argc; /* INT */
            foo.value.num_int = 42;
    
            bar.type = argc + 1; /* FLOAT */
            bar.value.num_float = 42.0;
    
            std::cout << ( is_float(get_number(foo)) ? "Ano\n" : "Ne\n" );
    
            return 0;
    }
    3.9.2007 23:20 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: buga, ale funguje
    Jenže u takových jemných nuancí se může projevit, že C a C++ jsou přes svou příbuznost ve skutečnosti odlišné jazyky.
    3.9.2007 14:51 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: buga, ale funguje
    to neni nejaka narazka... ale muzete mi ukazat, nekde ve standardu z ceho plyne ta vlastnost ternarniho operatoru, ze tam da tu implicitni konverzi na float/double... protoze java v takovem pripade rve chybu, ze neco takoveho je hodne hloupy napad... coz si myslim, ze je spravne...

    kazdopadne, pritomnost toho prevodu na float muze vest k neprijemnym projevum, ktere se projevi jednou za deset let....
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    3.9.2007 15:01 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: buga, ale funguje

    V tom draftu ISO/IEC 9899, který jsem našel na webu, je to sekce 6.5.15. Podstatné pasáže:

    One of the following shall hold for the second and third operands:

    • both operands have arithmetic type;
    • ...

    ...

    If both the second and third operands have arithmetic type, the result type that would be determined by the usual arithmetic conversions, were they applied to those two operands, is the type of the result.

    3.9.2007 15:23 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: buga, ale funguje
    diky, mate pravdu... ja jsem si to celou dobu myslel, jenom jsem to nemel nicim podlozene, teda krome assembleru...
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    3.9.2007 15:44 Sinuhet
    Rozbalit Rozbalit vše Re: buga, ale funguje
    protoze java v takovem pripade rve chybu, ze neco takoveho je hodne hloupy napad
    Jste si jist? Nezkousel jsem to, ale podle tohoto odkazu bych rekl, ze to dopadne stejne jako v c/c++.
    3.9.2007 15:58 Filip Jirsák | skóre: 68 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: buga, ale funguje
    Eclipse compiler ukazuje jako návratový typ výrazu true ? 1 : 1f typ float.
    3.9.2007 16:00 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: buga, ale funguje
    mate pravdu, rve to, jenom kdyz se tomu podstrci objekty
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    3.9.2007 16:16 Filip Jirsák | skóre: 68 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: buga, ale funguje
    Eclipse kompilátor tedy neřve, ani když do ternárního výrazu dosadíte objekty. Prostě jen výsledkem takového výrazu bude společný předek obou typů.
    3.9.2007 16:35 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: buga, ale funguje
    public static void main(String[] args) {
       Float f = new Float(42.0f); 
       Integer i = new Integer(42);
       System.out.println(true ? f : i);
    }
    
    gcj: error: Incompatible type for '?:'. Can't convert 'java.lang.Float' to 'java.lang.Integer'.
    ja uz jsem na to prave jednou narazil v prave v jave a divil jsem se proc to v C proslo...
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    3.9.2007 16:52 Filip Jirsák | skóre: 68 | blog: Fa & Bi
    Rozbalit Rozbalit vše Re: buga, ale funguje
    Nevím, jestli bych zrovna gcj považoval za etalon kompilátorů Javy… Tohle taky nepřeloží?
    Float f = new Float(42.0f); 
    Integer i = new Integer(42);
    Number x = true ? f : i;
    
    nebo
    float f = true ? 1 : 1f;
    
    3.9.2007 19:15 Marcel Šebek | skóre: 21 | blog: c
    Rozbalit Rozbalit vše Re: buga, ale funguje
    Kompilátor od Sunu (konkrétně verze 6, ale to je asi jedno) to samozřejmě přeloží.
    Real programmers don't comment their code. If it was hard to write, it should be hard to read.
    3.9.2007 15:42 depka
    Rozbalit Rozbalit vše Re: buga, ale funguje
    nasel jsem tu chybu, je v neznalosti autora blogu ... ;D a cokoladku nechci dik :)
    3.9.2007 15:45 disorder | blog: weblog
    Rozbalit Rozbalit vše Re: buga, ale funguje
    on ale netvrdi, ze to je bug prekladaca, takze je to realny bug bez ohladu na znalosti autora
    3.9.2007 17:00 depka
    Rozbalit Rozbalit vše Re: buga, ale funguje
    a ja to myslel tak ze to zadny bug neni..
    3.9.2007 17:15 disorder | blog: weblog
    Rozbalit Rozbalit vše Re: buga, ale funguje
    to, ze sa software nesprava ako by mal, nie je bug?
    3.9.2007 18:09 depka
    Rozbalit Rozbalit vše Re: buga, ale funguje
    doporucuju precist celociselna a realna rozsireni v nejake c/c++ referenci
    3.9.2007 18:35 disorder | blog: weblog
    Rozbalit Rozbalit vše Re: buga, ale funguje
    co maju chyby programu spolocne s nejakymi referenciami?
    3.9.2007 19:11 depka
    Rozbalit Rozbalit vše Re: buga, ale funguje
    no potom zjistis ze to neni chyba ale standart, ale ty furt meles svoje...
    3.9.2007 19:40 disorder | blog: weblog
    Rozbalit Rozbalit vše Re: buga, ale funguje
    si debil alebo ano? tretikrat ti hovorim, ze sa nebavime o prekladaci ale o tom ako sa ma spravat software!
    3.9.2007 19:59 depka
    Rozbalit Rozbalit vše Re: buga, ale funguje
    hmmm sam si debil a sam nevis o cem mluvis..
    3.9.2007 22:09 disorder | blog: weblog
    Rozbalit Rozbalit vše Re: buga, ale funguje
    sorry, ale dotycnu implementaciu scheme, ktora nevie poriadne narabat s cislami by som velmi nevyuzil, mojko... bag jak sviňa
    3.9.2007 22:32 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: buga, ale funguje
    ta chyba se fakt musi projevovat jenom v extremnich pripadech a jestli vubec.... kazdopadne je to chyba... protoze program nedela, to co by od nej clovek cekal... btw. jeste budu muset vyzkouset, jak se bude chovat na procesorech, ktere maji vyrazne mensi pocet FPU (ultrasparc t1) ...protoze vsechny celociselne operace jsou nedopatrenim operacemi v plovouci radove carce... ;-]
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    3.9.2007 22:45 disorder | blog: weblog
    Rozbalit Rozbalit vše Re: buga, ale funguje
    trosku som zvelicil, ale predsalen taka chyba sa niekedy niekde moze prejavit a co potom? :D
    4.9.2007 17:53 depka
    Rozbalit Rozbalit vše Re: buga, ale funguje
    potom je to jedine problem programatora.... btw mam dve knihy o c/c++ a kazda me na toto upozornila....
    4.9.2007 18:23 disorder | blog: weblog
    Rozbalit Rozbalit vše Re: buga, ale funguje
    nehovor, ja som myslel, ze bugy robi satan a nie programator. duh!
    4.9.2007 19:34 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: buga, ale funguje
    vsichni programatori delaji chyby... teda az na radka hulana, ktery od svych ctrnacti let, dokaze napsat denne nekolik mega peclive odladeneho kodu ;-]
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    4.9.2007 19:32 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: buga, ale funguje
    to je bajecne! ja mam taky dve knizky o c/c++! a vite co by bylo bajecne... kdyby vase prispevky mely i nejakou informacni hodnotu...
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    3.9.2007 15:57 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: buga, ale funguje
    problem je, ze pri slozeni konverzi int-float a float-int nemusime vzdy dostat identitu, protoze oba dva typy maji sve omezeni... me by spis zajimal nejaky extremni priklad, kdy se ta chyba projevi....
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    3.9.2007 16:26 disorder | blog: weblog
    Rozbalit Rozbalit vše Re: buga, ale funguje
            float f = 16777216.0;
            int i = 16777216;
    
            printf("%d\n%d\n%d %f\n", f == i, ++f == ++i, i, f);
    
    staci? vystup je:
    1
    1
    16777217 16777216.000000
    
    3.9.2007 16:43 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: buga, ale funguje
    diky... to jsem hledal...
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    3.9.2007 17:08 Sinuhet
    Rozbalit Rozbalit vše Re: buga, ale funguje
    Tak to nebyl zrovna nejlepsi priklad...
    3.9.2007 17:12 depka
    Rozbalit Rozbalit vše Re: buga, ale funguje
    asi jste to stale nepochopil, zmente float za double
    3.9.2007 17:16 disorder | blog: weblog
    Rozbalit Rozbalit vše Re: buga, ale funguje
    ty si nejaky chytry, to by som sam nevymyslel, teda...
    5.9.2007 09:14 MJ | Tady a teď
    Rozbalit Rozbalit vše Re: buga, ale funguje
    Ehm? Není to spíš učebnicový příklad nedefinovaného pořadí side-efektů? :-)

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.