Hogy működik a bitenkénti osztás?
> a) a xorzás kommutatív,
> b) a xorzás asszociatív,
Legalábbis a természetes számok halmazán, ha az eredeti Bool-algebrai XOR-t a számok kettes számrendszerbeli alakjára alkalmazzuk. Mindenesetre ez pl. egy jó kiindulási alap a permanenciaelvhez.
> c) a xorzás disztributív az uniteráltjára,
Itt a csík tolja a repülőt. Te *feltételezted*, hogy a XOR disztributív a saját uniteráltjára, és a disztributivitás összefüggéséből fejtetted vissza, hogy mi az uniteráltja. Hát persze, hogy arra disztributív lesz a XOR, mert így lett meghatározva. Kicsit olyan, mintha egy háromszögbe behúznád a szakaszfelező merőlegeseket – amik ugye két-két csúcstól azonos távolságra lévő pontok halmaza –, majd rácsodálkoznál, hogy a metszéspontjuk a háromszög köré írt kör középpontja. Hát persze, mert ezen szabályosság alapján lett meghatározva a pont. Ha a szögfelezőket húztad volna be, akkor meg a beírható kör középpontját kapnád.
A XOR pusztán csak azért disztributív az uniteráltjára, mert te azt mondtad, vagy azt feltételezted, hogy legyen az.
> d) az egységelem a 0,
Szintén a természetes számok halmazán, ami megint jó kiindulópont a permanenciaelvhez.
> e) a xorzás inverze önmaga,
Természetes számokra mindkét inverze önmaga. (Ha a XOR művelet valóban kommutatív, akkor nyilván mindkét inverze ugyanazt a műveletet jelenti.)
> f) ha az operandusokat megszorzod (elosztod) egy kettő-hatvánnyal, majd az xorzatot elosztod (megszorzod) ugyanazzal a kettő-hatvánnyal, akkor az eredeti xorzatot kapod, így határértékkel bármilyen valós operandussal tudsz xorozni,
Igen, bár ezzel nem tudom mire megyünk.
> g) a páros xorzás idempotens,
Őőő… Maga a művelet nem. A művelet akkor lenne idempotens, ha minden a-ra igaz, hogy (a XOR a=a). Viszont 1 XOR 1 ≠ 1, így maga a művelet nem idempotens. Sőt mivel (a XOR a) = 0, ezért a 0 az egyetlen idempotens elem: (0 XOR 0)=0.
> h) a xorzás minden valóson értelmezett, de általában sehol sem folytonos - fraktálfüggvény,
Nem, még mindig nincs definiálva valós, de még negatív számokra sem a XOR művelet. Ha igen, akkor nyilván meg tudnád mondani, hogy menni (π XOR e), vagy mennyi ( 0,38 XOR √2 ).
> i) az éselés disztributív a xorzásra,
Megint csak természetes számok esetén. De ez is jó kiindulási alap lehetne a permamenciaelvre. Csak mégsem az, mert az és művelet sem értelmezhető nem természetes számokra.
> j) egy xorzat egyenlő az operandusok összege mínusz az éseltjük duplája.
Természetes számok esetében igen. De ez megint abból fakad, hogy a számoknak a kettes számrendszerben felírt helyiértékes alakját, mint bitsorozatot feleltettük meg. Nyilván az és fogja az átvitelbiteket jelenteni, ezért kell megszorozni kettővel (tulajdonképpen ez egy balra léptetés, ami ekvivalens a 2-vel való szorzással).
~ ~ ~
Egyrészt itt a XOR műveletét kellene értelmezni negatív, esetleg racionális, és ha lehet, akkor valós számokra. Ehhez kellenének az olyan összefüggések, mint:
a XOR (b+c) = ???
vagy
a XOR (b*c) = ???
Amiből egzakt, egyértelmű módon le lehetne vezetni egyenletként (a XOR b)-t.
~ ~ ~
Másrészt ahhoz, hogy iteráljuk a műveletet, nem feltétlenül szükséges a XOR-t bővebb számhalmazra értelmezni. Lehet úgy is meghatározni az iterált függvényt, hogy azt csak természetes számokra értelmezzük. De ha az alapműveletek klasszikus iterálási szabályait nézzük, akkor:
a ⊗ 0 = ı = 0
a ⊗ 1 = ı XOR a
a ⊗ 2 = ı XOR a XOR a
a ⊗ 3 = ı XOR a XOR a XOR a
a ⊗ 4 = ı XOR a XOR a XOR a XOR a
…
Mivel (∀n n XOR n = 0), ezért azt az összefüggést kapjuk, hogy:
a ⊗ n = a ⊗ (n±2m)
Így:
a ⊗ 2m = 0
a ⊗ (2m+1) = a
Összesítve:
a ⊗ n = (n MOD 2) * a = (n AND 1) * a
És ha ez a művelet kommutatív, akkor meg az, hogy:
a ⊗ b = (a MOD 2) * (b MOD 2) = (a AND 1) * (b AND 1) = (a*b) MOD 1 = (a*b) AND 1
Ez eddig nem tűnik túl érdekesnek…
Persze ez az iterálásnak csak egy speciális esete, egyáltalán nem triviális, hogy ezt kellene alkalmazni. Hogy mit kellene alkalmazni, azt a XOR-nak a természetes számokon feltárt lényeges összefüggéseiből kellene következnie.
> Te *feltételezted*, hogy a XOR disztributív a saját uniteráltjára, és a disztributivitás összefüggéséből fejtetted vissza,
Ezt kikérem magamnak! Még ennél a kérdésnél *is* leírtam, hogy kell uniterált függvényt meghatározni, mert feltételeztem, hogy nem ismered az Abel függvényegyenletet, és hogy utána olvasni se fogsz. De még egyszer:
y(1+y^-1(x)) = y uniteráltja
y(x) = a xor x esetén az uniterált: a xor (1 + a xor x)
Sőt, itt a nem csak paraméter, hanem változó is. A disztributivitást teljesen véletlen fedeztem fel. És természetesen valósokra is működik, ahogy az éseléssel is. Nem értem miért okoz akkora bonyodalmat egy kettedes pont... attól nem lehet xorozni?!
> > f) ...,
> Igen, bár ezzel nem tudom mire megyünk.
Hát mondjuk pont ezzel tudod kiterjeszteni természetes számokról valós számokra a xorzást. Ezt próbálom elmagyarázni már mióta.
> > g) a páros xorzás idempotens,
> Őőő…
Ezt úgy értettem, hogy x xor y xor y = x. Lehet rosszul használom ezt a kifejezést.
> Nem, még mindig nincs definiálva valós, de még negatív számokra sem a XOR művelet. Ha igen, akkor nyilván meg tudnád mondani, hogy menni (π XOR e), vagy mennyi ( 0,38 XOR √2 ).
Lásd: f) pont. Persze, hogy meg tudom mondani, ezt figyeld:
xor(Pi,exp(1)) = 1.577609
xor(0.38,sqrt(2)) = 1.044163
> Összesítve:
> a ⊗ n = (n MOD 2) * a = (n AND 1) * a
Tehát azt mondod, hogy (x mod 2) = (x és 1)? Ez tévedés! Feltételezem láttad már az y = (x és 1) függvényt valósokon is, ilyen négyszögjelfüggvény. Az y = x mod 2 pedig fűrészfogfüggvény, sok függvényábrázoló meg tudja neked jeleníteni.
> a ⊗ b = (a MOD 2) * (b MOD 2)
Ezen már kellett gondolkodnom, de (1 ⊗ 0.5) ⊗ 2 = (1 % 2) × (0.5 % 2) × (2 % 2) = 1 × 0.5 × 0 = 0, nem pedig 1, ahogy annak kellene. Gondold át még egyszer, amiket írtam, légy szíves.
>> f) ha az operandusokat megszorzod (elosztod) egy kettő-hatvánnyal, majd az xorzatot elosztod (megszorzod) ugyanazzal a kettő-hatvánnyal, akkor az eredeti xorzatot kapod, így határértékkel bármilyen valós operandussal tudsz xorozni…
Nos ezen tényleg kicsit átsiklottam.
Tehát az állítás az, hogy:
2*(a XOR b) = (2a XOR 2b)
Oké, tehát tulajdonképpen a nem egész számokat kvázi úgy kezeled, mint a kettes számrendszerbeli tizedes – akarom mondani kettedes – tört alakjukat. Hiszen gyakorlatilag ami itt történik az kettes számrendszerben a „kettedesvessző” tologatása. Végül is oké…
Lenne… Viszont nekem itt rögtön beugrott az
1 = 0,999999…
esete. Ugye itt a 0,999999… nem csak közelít az 1-hez, hiszen a számjegyek száma nem csak közelít az végtelenhez. A számjegyek száma deklaráltan végtelen, így a 0,999999… pontosan 1. Kettes számrendszerben is így van ez:
1₍₂₎ = 0,111111…₍₂₎
1 XOR 1 = 0
0,111111…₍₂₎ XOR 0,111111…₍₂₎ = 0
Eddig oké, csakhogy:
1,000000…₍₂₎ XOR 0,111111…₍₂₎ = 1,111111₍₂₎ = 10,000000…₍₂₎
Magyarán:
1 XOR 1 = 2
Izé… Nekem itt valami igencsak gyanús…
És a probléma kvázi bármilyen véges „kettedestört” alaknál fennáll, hiszen:
0,101₍₂₎ = 0,100111111…₍₂₎
100₍₂₎ = 11,111111…₍₂₎
De még ha azt az álláspontot is fogadjuk el, hogy 1≠0,999999…, csak közelít hozzá, akkor is elveszik itt a konvergens jelleg, amint műveleteket végzünk a két számon. Az eredmények közötti különbség nem fog a 0-hoz konvergálni.
Magyarán bár:
lim (1-0,111111…) = 0
lim (1 XOR 1)-(1 XOR 0,111111…) ≠ 0
És ez így továbbra sem tűnik a XOR műveletnek egy a valós számokra való konzisztens kiterjesztésének.
(Amúgy a negatív számokra még mindig nem definiáltuk a XOR-t, hiszen ez csak a pozitív valósakra lenne kiterjesztés, már ha ezen paradoxon mentén lehet annak tekinteni.)
~ ~ ~
> > Te *feltételezted*, hogy a XOR disztributív a saját uniteráltjára, és a disztributivitás összefüggéséből fejtetted vissza,
> Ezt kikérem magamnak!
:-) Pedig valami ilyesmi történt. Nem direkt módon, hanem rejtve, közvetett módon.
> nem ismered az Abel függvényegyenletet, és hogy utána olvasni se fogsz.
Abel-csoportról hallottam már. Olyan csoport, amiben a csoportművelet kommutatív. A csoport meg ugye asszociatív, invertálható grupoid. Az (ℕ,XOR) nyilvánvalóan Abel-csoport, hiszen a XOR művelete asszociatív, invertálható és kommutatív. Eddig oké. Ha az iteráltja asszociatív, akkor a (ℕ,XOR,⊗) gyűrű lesz. Ha De ennek nem tudom mi köze az iteráláshoz.
Az iterálás definícióját leírtam:
f(0) = ı
f(n+1) = g(f(n))
Itt a „f” függvény az „g” függvény iteráltja. Elvileg lehet más is, de gyakran praktikus ı-t a g függvény neutrális elemének választani. De figyelem, nem muszáj, csak lehet…
Ha:
f(0) = i := 0
g(x) := x+a
akkor szépen megkapjuk, hogy:
f(0) = 0
f(1) = g(f(0)) = g(0) = 0+a = a
f(2) = g(f(1)) = g(a) = a+a = 2a
f(3) = g(f(2)) = g(2a) = 2a+a = 3a
…
Magyarán egy adott „a” esetén az „f” függvény (ami x-szel való szorzást jelent) a „g” függvény iteráltja (ami meg az „a”-val való növelést, vagy az „a” hozzáadását jelenti). Ezt hányaveti módon meg lehet úgy fogalmazni, hogy a szorzás az összeadás iteráltja.
Ugyanígy, ha:
f(0) = 1
g(x) = x*a
Akkor:
f(0) = 1
f(1) = g(f(0)) = g(1) = 1*a = a
f(2) = g(f(1)) = g(a) = a*a = a²
f(3) = g(f(2)) = g(a²) = a²*a = a³
Az „a” való szorzás iterációjával kapjuk a hatványozást.
Vagy ha:
f(0) := 0
g(x) := S(x)
Akkor:
f(0) = 0
f(1) = S(f(0)) = S(0) = 1
f(2) = S(f(1)) = S(1) = 2
f(3) = S(f(2)) = S(2) = 3
A szukcesszió n-szeri iterálásával megkapjuk az n-nel való összeadást.
> y(1+y^-1(x)) = y uniteráltja
Magyarán azt mondod, hogy:
f(1+f'(x)) = g(x)
Ha műveletekre váltom:
(1 ⊕ x⊘a) ⊗ a = x⊕a
Ez meg csak akkor lesz igaz, ha:
(1 ⊕ x⊘a) ⊗ a = (1⊗a) ⊕ (x⊘a⊗ a)
Ez meg csak akkor fog teljesülni, ha a ⊗ művelet disztributív a ⊕ műveletre.
Bár lehet, hogy így értetted:
(1 + x⊘a) ⊗ a = x⊕a
Csak akkor meg nem igaz, ha a hatványozás összefüggéseire cserélem ki:
(1 + ⁿ√x) ^ n = x*n
Pont azért nem igaz, mert a hatványozás nem disztributív az összeadásra nézve. Tehát akárhogy is, a diszributivitás – mint elvárás – benne van a te uniterált konstrukciódban.
> iteráció alatt szuperfüggvény-képzést értek
Ezzel meg az a probléma, hogy magyarázatul egy kizárólag általad használt fogalmat használsz. Nincs olyan matematikai fogalom, hogy „szuperfüggvény”.
~ ~ ~
> Persze ez az iterálásnak csak egy speciális esete, egyáltalán nem triviális, hogy ezt kellene alkalmazni.
Igen, lehet más függvényt is használni és azt iterálni, de ha nem ezt használjuk, akkor már nem a XOR művelet iteráltjáról beszélünk, hanem valamilyen más függvény iteráltjáról.
Átiratban, ha:
g(x) = x XOR a
akkor ennek az iteráltja:
f(0) = 0
f(n+1) = g(f(n))
Így nyilván:
f(0) = 0
f(1) = g(f(0)) = g(0) = 0 XOR a = a
f(2) = g(f(1)) = g(a) = a XOR a = 0
f(3) = g(f(2)) = g(0) = 0 XOR a = a
f(4) = g(f(3)) = g(a) = a XOR a = 0
f(5) = g(f(4)) = g(0) = 0 XOR a = a
…
Ahogy te is írtad:
>>> g) a páros xorzás idempotens,
> Ezt úgy értettem, hogy x xor y xor y = x.
Ha nem a
g(x) = x XOR a
függvényt iteráljuk, akkor bármit is kapunk, az aligha lesz nevezhető a XOR művelet iteráltjának.
De figyelem, ez még mindig csak egy (ℍ,ℕ) →ℍ definíció, az így kapott műveletet ℕ-nél tágabb halmazra ugyanúgy csak permanenciaelvek mentén lehet kiterjeszteni. Az iteráció, mint eljárás jellegéből fakadóan csak arra ad értelmezést, ha az egyik paraméter természetes, vagy esetleg egész szám, tágabb halmazra kiterjeszteni ezt az operandust szintén csak permanenciaelvek mentén lehet (ha lehet).
Így nyilván a
a ⊗ n = (n MOD 2) * a
összefüggés n∈ℕ esetén áll fenn, az
a ⊗ b = (a MOD 2) * (b MOD 2) = (a AND 1) * (b AND 1) = (a*b) MOD 1 = (a*b) AND 1
szintén csak a,b∈ℕ esetén áll fenn.
Az (n mod 2) valójában azt fogalmazza meg képlet szintjén, amit te úgy fogalmaztál meg, hogy „a páros xorzás idempotens”, kiegészítve azzal, hogy a páratlan meg egyenértékű az egyszeri „xorzással”:
x XOR y XOR y XOR y XOR y XOR y = x XOR y
> Magyarán bár:
> lim (1-0,111111…) = 0
> lim (1 XOR 1)-(1 XOR 0,111111…) ≠ 0
Szép következtetés, és valóban! Feltételeztem, hogy láttad az y = (x és 1) függvényt valósokra, sőt negatívokra is, a négyszögjel, tudod. Beszéltünk arról is, hogy van az az összefüggés, ami a xorzat és az éselt ill. összeg közt teremt kapcsolatot, esetünkben:
1 xor x = 1 + x - 2×(1 és x)
Így már el tudod képzelni negatívokon és valósokon is ezt a függvényt: emelkedő fűrészfog.
Amihez már komolyabb fantázia kell - vagy csak egy kis programozói véna, hogy implementáld, és kirajzoltasd -, hogy az y = x xor 2x függvényt elképzeld. Na ez fraktálfüggvény! Ahogy az y = x és 2x is az. És jól látszik, hogy ezek a fraktálfüggvények mindenhol értelmezettek, de sehol nem folytonosak, így nem is differenciálhatók hagyományos értelemben (esetleg máshogy?).
Akkor linkelem mire gondoltam: [link]
Mondjuk Abel úr fordítva jelölt egy-két dolgot, de a lényeg ez: egy f(1+f^-1(x)) függvény iteráltja f(x).
Jelen esetben, a xorzás uniteráltja:
y ⊕ x uniteráltja = x ⊕ (1 + (x ⊕ y))
Ha úgy tetszik, ennek - de y-t le is rögzítheted mondjuk 1-nek - keressük a szuperfüggvényét/iteráltját.
> Bár lehet, hogy így értetted:
> (1 + x⊘a) ⊗ a = x⊕a
> Csak akkor meg nem igaz,...
Igen, egyáltalán nem biztos, hogy a művelet disztributív az uniteráltjára, lásd: hatványozás->szorzás, tetráció->hatványozás,... és jól sejted, valószínűleg a szuperxorzás sem lesz az a xorzásra, bár erre nem vennék mérget.
Na, úgy érzem alakul a kép mindenki fejében. :)
Repkednek a nagy szavak, de egyvalami mintha kimaradt volna. Megnézni azt a 16 nyomorult bitenkénti műveletet, hogy van-e köztük olyan, ami teljesíti a bitenkénti szorzás/osztás általad elvárt tulajdonságait. Mondjuk így elsőre:
a xor a = 0 = 2 [művelet] a teljesüljön minden a-ra.
a xor a xor a = a = 3 [művelet] a teljesüljön minden a-ra.
Kilométerekről látszik, hogy nincs ilyen, de tessék, menj végig azon a 16 darab bitenkénti műveleten és győződj meg róla a saját szemeddel vagy kódoddal. Felesleges előre agyalni azon, hogy mit jelentene e-vel vagy pí-vel szorozni, mert bitenkénti műveleteket használva már kettővel és hárommal se tudsz, akkor se ha beszarsz vagy a fejed tetejére állsz.
#47: Szerintem azt már tisztáztuk, hogy ami műveletet keresünk, az már bizonyosan nem bitenkénti művelet lesz, de egy matematikai szempontból akár értelmezhető művelet. Hogy haszna van-e, vagy érdekes-e? Haszna nem hiszem, hogy sok lenne, érdekessége is – szvsz. – csekély, de hát miért ne matekozhatnánk egy kicsit.
A XOR művelet logikai művelet, így {0,1}, vagy {hamis, igaz} halmazon működik. Ha egy szám kettes számrendszerbeli alakjában bitenként, magyarán helyiértékenként végezzük el a XOR művelet, akkor kapunk egy új műveletet.Ez nem kiterjesztése a XOR műveletnek bővebb számhalmazra, hanem egy új művelet, amit tradicionális okok miatt ugyanúgy XOR-nak hívunk. Ennek a műveletnek keressük az iteráltját, ami nyilván már nyomokban sem tartalmaz „bitenkénti” jelleget.
45/48 2*Sü tegnap 23:37 (2020.05.25.):
"Lenne… Viszont nekem itt rögtön beugrott az
1 = 0,999999…
esete. Ugye itt a 0,999999… nem csak közelít az 1-hez, hiszen a számjegyek száma nem csak közelít az végtelenhez. A számjegyek száma deklaráltan végtelen, így a 0,999999… pontosan 1. Kettes számrendszerben is így van ez:
1₍₂₎ = 0,111111…₍₂₎
1 XOR 1 = 0
0,111111…₍₂₎ XOR 0,111111…₍₂₎ = 0
Eddig oké, csakhogy:
1,000000…₍₂₎ XOR 0,111111…₍₂₎ = 1,111111₍₂₎ = 10,000000…₍₂₎"
Most nincs időm végig játszani a gondolatot. De ha az 2^n súlyozott alak helyett pl. gray kódban néznénk meg, ott mi történne?
BCD-ben felírva ugyanezt az eredményt kapjuk azt végig gondoltam. A gray kódra most nem vagyok képes.
#48:
> ami műveletet keresünk, az már bizonyosan nem bitenkénti művelet lesz,
Igen.
> Ha egy szám kettes számrendszerbeli alakjában bitenként, magyarán helyiértékenként végezzük el a XOR művelet, akkor kapunk egy új műveletet.Ez nem kiterjesztése a XOR műveletnek bővebb számhalmazra, hanem egy új művelet,
Ezzel vitatkozok még pedig azért, mert számtalan programozási nyelvben úgy implementálták a xor-t, hogy azt ne csak boolean értékekre tudd alkalmazni, hanem integerekre is (egészekre). Itt van például a w3schools-on a python-féle bitenkénti xorzás is:
Itt ^ (kalappal) jelölik ezt műveletet. De tudod mit, próbáld ki magad! Ott vannak ilyen kis zöld "Try it" gombok, kattints rá, töröld ki a bal ablakot, és írd be, hogy "print(-1 ^ 1)", és megkapod -1 és 1 xorzatát. Floatra (double-re) magad kell lekódolni, de nem bonyolult. Ha tritenkénti műveleteket akarsz csinálni, az már egy kicsit keményebb dió.
#49:
> De ha az 2^n súlyozott alak helyett pl. gray kódban néznénk meg, ott mi történne?
A Gray-kódban a trükk a következő: a természetes számokon kettessével lépegessünk, és minden második párt fordítsunk meg, aztán menjünk vissza az elejére, négyesével lépegessünk és minden második párt fordítsunk meg,... ezt ismételjük, amíg szükséges, és a kapott számok bináris reprezentációja, lám, a természetes számok Gray-kódja. Eléggé nyakatekert módszer. Én maradnék az "alapértelmezett" bináris reprezentációnál, de ha nagyon érdekel tegyél fel egy új kérdést.
Ahogy a #46-osban írom elég egyszerű fraktálfüggvényeket előállítani (y = x xor 2x), amik pedig mindenhol szakadtak. Úgy lennének folytonosak - sőt differenciálhatók -, ha rendeznénk a függvényt, de akkor meg a helyek sorrendje lenne szakadásos. Csöbörből vödörbe. Szerintem fogadjuk el, hogy ez egy ilyen függvény, és ezzel kezdjünk valamit, ne próbáljunk meg trükközni.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!