Diskuze: Něco podobného jako fuzzy logika

Tvůrce

Zobrazeno 12 zpráv z 12.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Pokud jsem to správně pochopil, tak bych to napsal takhle:
char Funkce(int cislo)
{
return (cislo >= 0) ? "+" : "-";
}
Mělo by to vracet nulu jako znak, v případě, že vstup je nula jako číslo.
char Funkce(int cislo)
{
return (cislo > 0) ? '+' : (cislo < 0) ? '-' : '0';
}
A nějaké řešení čistě bitově přes logické funkce by to mělo?
Kdyby se pak výsledek jen překonvertoval na znak.
char sign(int i) {
if (i == 0) return '0';
if (i >> 31 != 0) return '-';
return '+';
}
Posun bitu je zajímavý, ale kdyby se nějak dal skloubit s těmi
ostatními
stavy - takhle to je 3x pořád podmínka = stav. Vlastně je to stejné
řešení
jako to co má Lukáš Hruda.
Dalo by se to napsat v asm s jen jednou podminkou (v eax posilas cislo, do al dostanes vysledny znak):
cmp eax, 0
jz nula
jge kladny
mov al, 0x2D ; -
ret
kladny:
mov al, 0x2B ; +
ret
nula:
mov al, 0x30 ; 0
V C# "bez podminky" treba takhle, ale to asi neni reseni, ktere sis
predstavoval
static char sgn(int number)
{
return number.ToString("+#;-#;0")[0];
}
misto jge by tam bylo spravnejsi *jg, i kdyz uz je to v tu chvili fuk, protoze pokud to byla nula, tak uz se skocilo jinam
Ono se to pak nejspis smrskne na problem jak z cisla -1/0/1 udelat odpovidajici znak bez podminkovani.
Udelat z cisla jen cislo 0/1/-1 (podle "znamenka") uz je celkem jednoduche a zpusobu je hromada.
(sorry za triple post, chtelo by to tu vyresit nejak jinak tu editaci
prispevku... )
Díky všem. Paradoxně Satikův C# kousek byl pro mě nejvíc
inspirativní
i když použil řešení takřka obchvatem.
Ale zajímavé jsou skoro všechny postupy a skutečně se ukazuje,
že je způsobů požehnaně.
Zobrazeno 12 zpráv z 12.