Vlákno názorů k článku LuaJIT – Just in Time překladač pro programovací jazyk Lua (3) od klusacek - Dik za clanek. Jen se mi nejak nezda to...

  • Článek je starý, nové názory již nelze přidávat.
  • 28. 10. 2014 17:09

    klusacek (neregistrovaný)

    Dik za clanek.

    Jen se mi nejak nezda to vysvetleni ze zjevne redundantni instrukce ISGT (pokud uz mame ISLT) je tam kvuli NaN.

    Asi mi neco unika, ale chcete tim rict x<NaN muze dat jiny vysledek nez Nan>x ?

    Ja bych spis chapal kdyby to tam bylo proto ze treba existuje jeste ISLTN ktera muze mit jako posledni argument konstantu a kdyz chteli porovnavat s konstantou obracene tak potrebovali IGSTN. No a ty puvodni instrukce, ktere porovnavaji registry tam daly oboje aby to bylo symetricke....

  • 28. 10. 2014 22:34

    ebik (neregistrovaný)

    Rekl bych, ze se tu neco pomichalo.

    Mohu vymenit ISLT s ISGE, argumenty neprohodim, ale prohodim true a false vetve kodu. Tady je problem s NaN.

    Mohu vymenit ISLT s ISGT (nebo ISLE s ISGE) s prohozenim argumentu. Pak neni problem s NaN, ale muze byt problem s tim, ze jeden argument je 8bitovy a druhy 16bitovy (jestli si predchozi dily pamatuju dobre).

    V clanku zminene prohozeni ISLT za ISLE je pak kombinace obou vyse zminenych prohozeni, a tedy trpi problemy obou.

  • 29. 10. 2014 12:03

    Pavel Tišnovský
    Zlatý podporovatel

    Jde o tuto vlastnost cisel reprezentovanych podle IEEE754 (float/double):

    local nan = math.sin(1/0)
    local x = 42
    
    print(nan)
    print(nan < x)
    print(nan <= x)
    print(nan >= x)
    print(nan > x)
    print(nan == x)
    print(nan ~= x)

    Coz by melo vypsat:

    nan
    false
    false
    false
    false
    false
    true

    Dokonce plati:

    local nan = math.sin(1/0)
    local x = nan
    
    print(x, nan)
    print(nan < x)
    print(nan <= x)
    print(nan >= x)
    print(nan > x)
    print(nan == x)
    print(nan ~= x)
    nan nan
    false
    false
    false
    false
    false
    true

    Takze predpoklad, ze <= a > popr. < a >= da vzdy opacnou booleovskou hodnotu zde neplati. Navic autor LuaJITu chtel zachovat semantiku operaci, tj. kdyz je nekde ve zdrojaku a<=b tak to prelozi (pokud to jde!) jako ISLE, ovsem v pripade konstant to nejde, ty haze na pravou stranu.

  • 29. 10. 2014 12:26

    klusacek (neregistrovaný)

    Aha, takze se da rict ze to je temi konstantami -- protoze jinak by mohli kyzeneho efektu vzdy docilit prohozenim operandu.

    Diky.