Hatvány negálása táblázatkezelőben

 ( oszkar | 2015. április 2., csütörtök - 11:36 )

Ha egy táblázatkezelőben beírom ezt: =-6^2, miért 36 az eredmény?

(A műveleti sorrend értelmében a hatványozás előbb végzendő el, mint a -1-gyel való szorzás, márpedig itt a '-' jel azt jelenti. A kérdésem csak annyi, hogy mi a ráció ugyan ebben, hogy nem a matematikának megfelelő módon értik, hanem mintha (-6)^2-t írnék.)

Néztem MS Office-szal, LibreOffice-szal, Gnumeric-kel is.

(Teljesen mellékes a kérdés szempontjából, de aki szerint -6^2=-36 (nem Excelben, programnyelvben, hanem a matematikában), az az egyszerűség kedvéért itt reagáljon, mert fárasztó hat helyen leírni ugyanazt.)

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Visszakérdezek:
A képletben szereplő -6 ugye nem (-1)*6, hanem csak egy negatív szám?

Annak a négyzete viszont -- ha jól számolok -- 36. Mi ebben probléma?

De még ha az általad vélt dolog is lenne cellában, azaz (-1)*6, ennek négyzetét kiszámolhatjuk úgy, hogy előbb a 6 négyzetét vesszük, majd azt szorozzuk meg (-1) négyzetével, a kapott eredmény ekkor is jó, szvsz.

De amit írtam, az nem azt jelenti. Ott a példa a wolframban is. (Tudom, az nem bizonyíték, de ha kell, lehivatkozom neked valamelyik általános iskolai matekkönyvet.

Akkor nézzük részletesen:

1. -6 az bizony (-1)*6 különben baj van.
2. (-1)*6 négyzete valóban: úgy van ahogy mondod
3. De akkor lássuk részletesen:
-6^2 = 0 - 6^2 = 0 - 36 = -36
vagy
-6^2 = (-1)*6^2 = (-1)*36 = -36
vagy sokkal rövidebben
-6^2 = -(6^2) <> (-6)^2

Szerinted mi nem stimmel itt?

Stimmelni stimmel, a tévedés jogát fenntartom magamnak.

Az nem lehet viszont, hogy az általad említett program -- valamilyen okból -- ezt a kifejezést balról-jobbra értékeli ki, azaz előbb negálja a numerikus értéket, s csak ez után végzi el a hatványozást?

Más javaslat -- a zárójelezésen kívül, ami korábban felmerült --: nem lenne célszerűbb a beépített függvényeket használni, s azok egymásba ágyazásával kiértékeltetni a kifejezést? (Nem biztos, hogy hatékonyabb, viszont talán egyértelműbb.)

Az Excel (és gondolom ennek nyomán a többi táblázatkezelő) szándékosan működik így, a '-' előjelet veszi előre a műveleti sorrendben, minden másban megfelel a matematikai konvencióknak, nyilván kompatibilitási okokból ez már nem is fog sosem változni. Ennek utánanéztem, tudomásul vettem, ha előfordul, hogy ilyet kell számolnom táblázatkezelőben, majd zárójelezek. Nem vagyok hülye, alkalmazkodok. A kérdésem csak az volt, hogy ugyan mi okból lehet ez így?

megválaszoltad magadnak: kompatibiltási okból. Anno egyszer valaki vagy nem tudott számolni, vagy csak direkt így implementálták. Nem ez az egyetlen hülyeség amit az excel hőskora óta vontat magával a szakma...

(1)-ben szépen leírod a szabályodat, (3)-ban meg áthágod, az a baj.

Vagyis nem baj: a politikai pálya tényleg nyitva áll előtted.

Az ismételt beszólás helyett mi lenne, ha egyszer egy bizonyítással ugranál elő? Én lentebb megtettem.

Mint leírtam: rögzítetted a szabályt és áthágtad. Mit bizonyítsak ezen?

Szerintem eddig is hősiesen bírtam, hogy az önkétely legkisebb szikrája nélkül olvastad a gyűlő beírásokat.

Bizonyíts be, hogy -x^2=x^2! (Mert azt állítod.)

Én megtettem az ellenkezőjét, amire persze nem reagálsz. Csak hülyézel, amit én meg nem tettem meg.

Nem, én azt állítom, hogy -6^2 = 6^2, konstans hatványáról beszélünk.

Ha ezt bizonyítani kell... -6^2 = ((-1)^2 * 6^2) = 1 * 36 = 6^2

Mivel pedig szívesen segítek bárkinek, ha hagyja, de még a saját gyerekeimet is magukra hagyom, amikor fixa ideával állítanak szembe, itt be is fejezném.

Pedig azt is írtad, hogy -x^2=x^2. De most tekintsünk el ettől. Akkor azt állítod, hogy a -x^2-be 6-ot helyettesítve nem -36 az eredmény. Ezt gondold át.

A bizonyításodban az első = jel nem igaz, a többivel egyetértek. Ha azt az elsőt bebizonyítod nekem, akkor meg vagyok győzve. :-)

Egyáltalán nem elvárás az, hogy egy változó helyébe szintaktikailag konkrét számot helyettesítve a matematikai jelentés is ugyanaz maradjon. Ez máshol is sérül, például:

Legyen x = 6, y = 7.

Ekkor xy = 42 (negyvenkettő), de bután szintaktikailag behelyettesítve 67 = 67 (hatvanhét) adódik.

Nem feltétlenül elvárás tehát, hogy a -6^2 és a -x^2 kifejezésekben a mínusz jel jelentése, illetve a műveleti precedencia megegyezzen.

Még egy kis kiegészítés:

Ha azt írod, hogy -6, akkor azt fel lehet fogni úgy (és többen ezt preferálják), hogy emögött nincs semmiféle művelet, hanem ez így egyben egy robbanthatatlan egységként "ott van" valahol a számegyenesen.

Ha azt írod, hogy -x, arra már nem tekinthetsz így, ott az x értékéből kiindulva muszáj valamit tenned. Vannak, akik a -6 -ot is így fogják fel, tehát hogy a 6-ból indulunk ki és azzal történik valami, elvégzünk egy műveletet.

Külön ínyencség, hogy az a valami, ami történik vele, az vajon 0-ból kivonás-e, vagy pedig (-1)-gyel szorzás?? :)

Ez szerintem nem jó példa, mert xy csak annak a rövidítése, hogy x*y, és a szorzásjelet csak betűkkel hagyhatod ki, hogy ugyanazt jelentse. Ettől még van egy konvenció, hogyan értsük a -6^2. Mint többször írtam, lehetne más a konvenció, de attól még van egy.

Mint lejjebb már írtam, nem vagyok meggyőzve arról, hogy amivel konkrétan Te eddig gyakrabban találkoztál, az globálisan világszerte is egy egyértelműen népszerűbb konvenció volna.

Hát, teljesen meggyőződve én sem vagyok, de pl. a Wolframalpha (és így vélhetően a Mathematica) is így érti, a Maxima is így érti, emlékeim szerint a Maple is így érti, az Octave is így érti, a GNU R is így érti (momentán ennyi komolyabb matematikai rendszerrel jut eszembe, hogy van tapasztalatom). Tudom, ezek is csak implementációk, de ezeket matematikusok készítették matematikusoknak. És mondjuk az angolszász konvenciót ezzel azért eléggé lefedtük szvsz. Ettől még lehet, hogy Japánban másképp értik, de nem hinném.

Szerintem igenis jó példa, ugyanis Te is megerősítetted, hogy épp arról van szó: betűk és számok esetén nem feltétlenül működik ugyanúgy a jelölésrendszer. Ha egy szorzásjel betűk közt elhagyható, számok között nem; akkor egy mínusz jelecske miért ne jelenthetne akár szintén mást betű illetve szám előtt? Nem azt mondom hogy mást jelent; pusztán figyelemfelkeltőnek, gondolatindítónak szánom az észrevételt.

Azzal, hogy jelenthetne mást, hogy is vitatkoznék. Arról vitázok, hogy hogy szokás érteni konkrétan.

1. 6 az bizony 2*3 különben baj van
2. 2*3 négyzete valóban: úgy van ahogy mondod
3. De akkor lássuk részletesen:
6^2 = 2*3^2 = 2*9 = 18 <> (2*3)^2 = 36

Vagy röviden -6 az egy szám, amit akár be is zárójelezhetsz, de általában nem szoktunk számokat magukban bezárójelezni.

De igen, negatív számok hatványozásánál:
(-6)^2=36
-6^2=-36

A műveletek sorrendje:
1) zárójel
2) hatványozás (gyökvonás)
3) szorzás (osztás), balról jobbra
4) összeadás (kivonás), balról jobbra

Az első hatványazonosság szerint a^b*c^b=(a*c)^b.

Ez esetben -1*6^2, vagyis (-1*6)^2. Hogy miért? Vegyünk egy másik példát:
6^2 = 2*3^2 = 2*9 = 18
vs
6^2 = (2*3)^2 = 6^2 = 36

Visszatérve az eredeti példára, ha másképp bontom fel a -6-ot, akkor a -6 = -1*6, és ha ezt második hatványra akarom emelni, akkor -1^2*6^2 = 1*36 = 36.

$ ruby -e "p -6**2"
-36

;)

6=3+3
3+3^2=12
Tehát 6^2=12.

hm. ha igy, akkor
-6^2 = ((-1)*6 ) * ((-1)*6)

"1. -6 az bizony (-1)*6 különben baj van."

az en mezei logikam belezuhan ebbe. mert ha a -6 az (-1)*6, akkor a
-1 = (-1)*1
es itt vegtelen rekurzioba valt, vagyis
-1 = (-1)*1 = ((-1)*1)*1 = (((-1)*1)*1)*1, stb.

szoval a ((((((-1)*1)*1)*1)*1)*1)*1 * 6 korul mentem flipperezni.

Nem jól számolsz.

http://www.wolframalpha.com/input/?i=-6^2

A matematikában így értik. Ezt tanultuk mindannyian általános iskolában. A táblázatkezelők miért nem értik így, ez a kérdés.

A képletben ez szerepel: -6^2, amit úgy kell érteni: -(6^2). Tetszik nem teszik, így van. A Wolfram is így érti, a számológépek is így értik.

Az a kérdés, miért jó, hogy a táblázatkezelők nem.

Nekem azt tanították, hogy a félreérthető dolgokat jelezzem egyértelműen.

Ez félreérthető. Normális ember ezt bezárójelezi, bármire is gondolt.
--
blogom

Ez nem félreérthető, hiszen van rá egyértelmű matematikai szabály. Nem azt nem tudom megoldani, hogy -36-ot kapjak, csak kíváncsi vagyok, mi az oka, hogy nem követik a matematikai konvenciókat.

Rendben, kövessük a matematikai konvenciókat.

Vegyél elő papírt, ceruzát.

Írd le a papírra a -6-ot, majd a 6-os mögé, felső indexbe írj egy kis kettes. Számold ki a kifejezés értékét.

Mennyi is jött ki?

Erről beszélek, hogy ez -36.

Ugye nem arra akarsz rábeszélni, hogy -x^2 = x^2?

-x = (-1)*x
ezért -x^2 = x^2 !

Magyarul -x^2 != -1*(x^2)

Nincs tiltva ettől eltérő konvenció alkalmazása, de viszonylag szűk körben fognak megérteni. A politikában ez pl. nyerő húzás, érettségin kevésbé.

Elolvasnád a lenti indirekt bizonyítást, ahol ezt cáfolom? És esetleg reagálnál arra? A lehülyézés helyett?

De akár ábrázolhatod a -x^2 és az x^2 parabolákat is.

Eszem-faszom megáll amikor bizonyításról vitatkoztok. Definícióról beszélünk! Arról, hogy a -6^2 úgy értendő-e, hogy (-6)^2, vagy pedig úgy, hogy -(6^2). Hogy a rákba lehetne ezen bármit is bizonyítani??? Maximum érvelni, hogy melyik definíció lenne a szimpatikusabb neked.

Erre már lentebb írtam, hogy OK.

Számológépeken legtöbbször van egy kivonás jel és egy mínusz előjel.
Ha a mínusz előjellel írsz be mínusz hatot, és azt emeled négyzetre, akkor 36-ot kapsz. Illetve ha kivonsz 0-ból hatot, egyenlőt nyomsz, és négyzetreemelsz, szintén 36-ot kapsz.

Ezt tanulmányozd (vagy gyakorlatilag bármelyik programnyelvet):
https://support.office.com/en-us/article/Calculation-operators-and-precedence-48be406d-4975-4d31-b2b8-7af9e0e2878a
... (meg egy kicsit a magyart is)

Elolvastam. Már előtte is. Tudom, hogy így veszi a műveleti sorrendet az Excel. Az volt a kérdésem, ez miért jó.

Mi a baj a magyarommal?

Több programnyelvben a „-” operátornak két jelentése van:
- 2 operandus esetén (3 - 1) a kivonás műveletet jelenti -> ennek a precedenciája kisebb a hatványozásénál
- 1 operandus esetén (-6) a negálás műveletet jelenti -> ennek a precedenciája nagyobb a hatványozásénál

A táblázatkezelő ennek megfelelően működik. Több lehetőséged is van:
- tudomásul veszed/elfogadod;
- nem veszed tudomásul, és méltatlankodsz;
- írsz a kifogásolt működésű programok készítőinek, és meggyőzöd őket, hogy rosszul gondolják ezt a dolgot; Sok sikert
- …

Kiegészítés:
Félreérthető volt, ezért töröltem.

-----
(&%;_98\<|{3W10Tut,P0/on&Jkj"Fg}|B/!~}|{z(8qv55sr1C/n--k**;gfe$$5a!BB]\.-

Nem méltatlankodok és tudomásul vettem. Annyi a kérdés, mi lehet az oka, miért jó, hogy így értik, és nem úgy, ahogy a matematikában általában (ahol szintén kettős jelentése van, de ott a negálás nem magasabb rendű művelet a hatványozásnál, lévén a (-1)-el való szorzással definiálható, arra meg van egyértelmű sorrendiség). Ha van egyáltalán bármi oka.

Feladom.

Mégis teszek még egy-két próbát:
- Egy regiszterbe egy negatív számot (-6)-ot írsz (pl. assembly nyelven). Utána pedig megszorzod saját magával, akkor ott is ezt az eredményt fogod kapni.
- Ha egy változó értéke negatív szám, és a változó tartalmát négyzetre emeled, akkor ott is ezt az eredményt fogod kapni.

-----
(&%;_98\<|{3W10Tut,P0/on&Jkj"Fg}|B/!~}|{z(8qv55sr1C/n--k**;gfe$$5a!BB]\.-

Ez világos. Most arról beszélsz, hogy (-6)^2=36. De én arról beszélek, hogy -6^2<>(-6)^2.

Ha egy táblázatkezelőben egy cellába írok egy negatív számot, és annak a négyzetét kiszámoltatom egy másik cellába, az pont így működik és nem is kéne, hogy másképp működjön. De hogy jön ez ide?

Most már tényleg utoljára:

A programozási nyelvek többségében (az excel is egy speciális programozási nyelv, speciális megjelenéssel) az egy operandusú mínusz („-”) a negálást jelenti. Ami a pozitív számból negatívat, a negatívból pedig pozitívat csinál. Jelen esetben a pozitív 6-ból, a negatív 6-ot (-6). Továbbá a negálás precedenciája legtöbb esetben magasabb mint a hatványozásé. Az is ismert, hogy a negatív szám négyzete is pozitív szám lesz.

Az ügy szempontjából nincs jelentősége, hogy egy matematikus/azték/babiloni/gázszerelő mit gondol erről. A lényeg az, hogy a programozási nyelvek többsége így kezeli az általad problémásnak tekintett helyzetet.

„Ha egy táblázatkezelőben egy cellába írok egy negatív számot, és annak a négyzetét kiszámoltatom egy másik cellába, az pont így működik és nem is kéne, hogy másképp működjön. De hogy jön ez ide?”

Tehát szerinted az a helyes, ha egy negatív szám (hint: egy operandusú negálás) négyzetre emelésének eredménye attól függ, hogy a négyzetre emelendő szám a négyzetre emeléssel egy cellában van, vagy pedig egy másik cella tartalmát emelem négyzetre?

A lényeg a precedencia! Mikor egy új programozási nyelvvel ismerkedem, akkor az első között nézem meg a precedencia szabályt. Ezzel némileg le lehet csökkenteni a későbbiekben a hibakeresésre fordítandó időt. Ha bizonytalan vagyok, akkor zárójelezek. Ez, némi plusz gépelésért cserébe, még több kellemetlenségtől kímél meg.

Összefoglalva: A táblázatkezelők az általam ismert programozási nyelvek többségénél megszokott módon kezelik a negálás operátort. És ennek örülök! És, éssel nem kezdünk mondatot. :-)

-----
(&%;_98\<|{3W10Tut,P0/on&Jkj"Fg}|B/!~}|{z(8qv55sr1C/n--k**;gfe$$5a!BB]\.-

Nos, amit nem tudtam (és eddig nem derült ki itt sem), hogy a legtöbb programozási nyelv hogy érti. Azt tudtam, hogy van, ami így érti, de én konkrétan kevés nyelvet ismerek.) Köszönöm, ezt kérdeztem!

programnyelve is valogatja:

$ bc -l
-6^2
36
$

illetve:

gnuplot> print -6**2
-36

plusz egy erdekes diszkusszio itten...

Ez így világos, és az is, hogy ha egy adott eszközt használok, alkalmazkodjak a szabályaihoz (bár a bc-nél nem is tudtam, hogy így érti, de azzal ritkán számolok). A linket köszi, erről beszélek én is.

Szóval akkor a kérdés még általánosabban: miért jó, hogy programnyelve válogatja, betartják-e a matematikai szabályokat?

A matematikai precedencia az, hogy a -6^2, az mínusz hat a négyzeten (amióta ismerjük a negatív számokat), nem pedig hat a négyzeten szorozva mínusz egy. Ahol ezt betartják, ott ez lett a szempont.

Ahol nem tartják be, ott vagy az a szempont, hogy zárójelezés kierőszakolásával egyértelműbb legyen a jelentés az olvasó számára, vagy az elemzés a parsernek - vagy csak nem is gondoltak az egészre, ahogy esett, úgy puffant, vagy gondoltak, de a megvalósításba hiba csúszott és a parser összekeveri az egyoperandusú mínuszt a kivonással.

Nem, -6^2 a matematikában 6^2-nem a negáltja. -x^2 szerinted egyenlő x^2-el?

Hhh...
Ne csak a magyartanártól kérd vissza az iskolapénzt - tróger egy tanári karod lehetett!

Biztos azok voltak. Akkor lássuk. Szerinted:
-x^2 = (-x)^2
azaz
-x^2 = x^2
adjunk hozzá mindkét oldalhoz x^2-t
0 = 2*x^2
ami ellentmondás

Nos?

És mi a bajom a magyarommal, válaszolni nem megy, csak beszólni?

Vagy nézd meg a -x^2 és az x^2 parabolákat esetleg.

A -x^2 egy változó négyzetének a negálását jelenti, amely változó lehet pozitív/negatív/nulla, de a -6 sose lesz más csak -6, bátran ábrázolhatod is az x -> -6^2 függvényt tetszőleges értelmezési tartományon (bár ez az eredeti kérdést fogja benned felvetni), várva, hogy egyszer 0 alá bukik.

Te most azt állítod, hogy ha a -x^2-be 6-ot helyettesítünk, akkor mást jelent a '-' jel? Merthogy azt is így írjuk: -6^2.

Másrészt fentebb azt állítottad, hogy -x^2=x^2. Most igen, vagy nem?

Korrekt, a -x-et tudd be a gépszíjnak (amit szégyellek): tégy az x helyébe L-t, jelezve, hogy az egy literál (itt: 6).

De ha -x^2<>x^2 (kivéve ha x=0), akkor -6^2<>6^2, nemdebár?

A matekod kapcsán nincs már reményem, de mivel kíváncsi vagy a magyarra:

"mint a -1-el" : -1-gyel

"mintha (-6)^2-t írnák." : írnék

Ha a magyarra tett megjegyzésem után visszaolvastad, de nem tűnt fel, az kínos.
Ha nem olvastad vissza, az még kínosabb.

Nem olvastam vissza és javítom. Egyszerűbb lett volna, ha szólsz. Nem figyeltem, a másodiknál meg mellényúltam. Borzasztó rossz a helyesírásom ezek szerint, ugye?

Akkor most lássuk a matekot!

Mert az ott igazából nem kivonás jel.

=-6^2 => 36
vs
=0-6^2 => -36

--

Ez így tételesen nem igaz. Lásd fentebb.

Mind szembe jön.

Világos, tehát a lehülyézés a legerősebb érved.

Fentebb írtam rá egy indirekt bizonyítást. Cáfold légyszíves!

Egy jelolest / konvenciot mert akarsz bizonyitani? (Nem lehet ugyanis. Ettol konvencio)

Azt bizonyítottam, hogy ha másképp értjük, akkor ellentmondásra jutunk.

Azert jutsz ellentmondasra mert egyszer igy ertelmezed egyszer meg ugy. azaz ha -x^2 az ugyan az mint (-x)^2 akkor az osszeadas x^2 -el mar nem 0. (-x)^2 + (x)^2 = -x^2 + x^2 /= 0. Felreneerts, tudom hogy matematikaban ezt ugy jelolik ahogy mondod. De nem azert mert valami egyetemes matematikai igazsag miatt igy lehet csak jelolni, hanem azert mert igy alakult ki a jeloles / igy kenyelmes.

Teljesen igazad van, erre nem figyeltem oda. De akkor hogy értessem meg azzal a szerencsétlennel (ha már folyamatosan lehülyézett engem), hogy -6^2=-36? (Bár az gondolom elég erős érv, hogy nézze már meg a -x^2 parabolát, meg helyettesítsen bele 6-ot. Feltéve, ha valaki tudja, hogy néz ki a -x^2 parabola.)

Elbeszéltek egymás mellett. Valójában arról van szó, hogy a -6^2 értelmezhető úgy is, hogy a 6 van behelyettesítve a -(x^2) képletbe (a félreértések elkerülése végett zárójeleztem be), meg úgy is, hogy a -6 van behelyettesítve az x^2 képletbe. Nekem az utóbbi tűnik természetesnek, bár matematikailag az előbbi a helyes. Én ezt arra vezetném vissza, hogy a matematikailag helyes jelölést a gyakorlatban időnként kényelmetlennek találjuk, ezért egyszerűsítünk. Én idejét sem tudom annak, mikor írtam papíron negatív számot utoljára zárójelben, mivel a spacing hiánya is teljesen egyértelműen jelzi, hogy a - előjelként szerepel. Pl. 69 - 42 vs. 69 -42.

Azt hittem ilyet csak az amcsik csinalnak az interneten.

Ez nem igaz, szerinted -a² = (-a)^2?

Ezt lx-nek is elmagyarázhatnád, bár odáig talán már eljutottunk, hogy -x^2 <> x^2, de ennek ellenére -6^2=6^2 szerinte.

" a hatványozás előbb végzendő el, mint a -1-el való szorzás"

Csakhogy itt a "-" az nem -1-geyl való szorzás, hanem a szám (-6) része. A parser előbb állapítja meg, hogy ez itt egy szám, aminek értéke -6, és utána hatványoz. -1-gyel senki nem szoroz.

Igen, az Excel ezt csinálja. Szerinted is -6^2=36? (Így papíron leírva értelemszerűen a 2-es a 6-os felső indexében.)

Ha ilyet látok gépben, hogy "-6^2", akkor gondolkozni kezdek, hogy hogy érti a beírója, mert nem egyértelmű. Itt ugyanis nem matematikai műveleti precedenciáról, hanem parse-olási kérdésről van szó: előbb állapítja-e meg a számok értékét és utána végez-e műveletet velük.

Papíron -36 lenne az érték, amire gondolnék. De nem feltételezem, hogy a gép ugyanúgy gondolkodik.

Igen, ez a kérdésem, hogy miért jó ez. Az lenne a logikus, ha egy (többek között) számítások végzésére használt program/programnyelv betartaná a matematikai konvenciókat. Annyi lett volna a kérdésem mindössze, hogy mi oka lehet annak, hogy mégsem. Nem kötekedés, kíváncsiság.

Szerintem: a programozási nyelvekben hagyományosan a negáció a legmagasabb precedenciájú. A hatványozás csak függvényhívásként érhető el, tehát a fenti probléma fel sem merül, mindig egyértelmű mi a művelet tárgya.

A táblázatkezelőben bevezették a hatványozás operátort, viszont a jelek szerint fontosabbnak tartották a "negáció a legmagasabb precedenciájú" hagyományt megtartani, mint hogy matematikailag helyesek legyenek. Talán azért, mert bár a hatványozás hagyományos írási módja, a felső index egyértelművé teszi a műveleti sorrendet, az "^" operátorral történő írási módnál ez már nem igaz. Ilyenkor az átlagos felhasználó valószínűleg inkább "programozói" módon gondolkodik, nem matematikusként.

Köszönöm itt is, ezt nem tudtam, hogy ez ennyire általános a programozási nyelveknél.

+1 értelmes nyelvben nincs hatványozás operátor.

Nos, ahol nincs hatványozás operátor, ott ez a probléma nem is létezik. :-)

-----
(&%;_98\<|{3W10Tut,P0/on&Jkj"Fg}|B/!~}|{z(8qv55sr1C/n--k**;gfe$$5a!BB]\.-

Ha kimondottan matematikához készítenek egy nyelvet, akkor azért célszerű, hogy legyen benne. Pl. Fortranban is van, és pontosan úgy működik, ahogy a matekban megszokott.

Jó igen fortranban van, de ott viszont matekos a kiértékelés is, szóval az ebben a topikban megjelent sok bullshit se igaz. Mondjuk az MS vicces tud lenni, windows számológépben nem volt precedencia, aztán rájöttünk, hogy olyan csak tudományos módban van.

matekos kiértékelés?

miről beszélünk?

a "6 + -6" kifejezés szerintetek "matekosan" helyes? szerintem igen, a Fortran fordítod mit kezd vele? szerintem simán "elbukik" rajta, mert a - jelet unáris operátornak fogja tekinteni, nem pedig előjelnek, azt meg nem fogja engedni aritmetikai operátor után, azaz zárójelezni kell...

online (gfortran-4.9.2): http://ideone.com/XjBpGh

szerkesztés: ha esetleg a hibaüzenetek alapján azt gondolnád, hogy máshol van a hiba, akkor kérlek "forkoljad" a kódot, és írd át a -6-ot mondjuk 6-ra, és lám azzal meg elboldogul,

pedig lehet szepsegeket csinalni mindenhol:

#include <stdio.h>

int main(void) 
{
 int    a,b;
 a=10,b=4;
 printf("%d\n",6+-6);
 printf("%d\n",a+-b);
 printf("%d\n",a-+b);
 printf("%d\n",a++-b);
 printf("%d\n",a+++-b);
 return(0);
}

:)

ragozhattad volna még, például:

/* ... */
printf("%d\n",a+++b);
printf("%d\n",a+++-b);
printf("%d\n",a+++--b);
printf("%d\n",a+++-++b);
printf("%d\n",a+++-+--b);
/* ... */

"a "6 + -6" kifejezés szerintetek "matekosan" helyes?" Nem nem az, be kell zárójelezned a 6 + (-6) :) Láttatok már ti matekórát?

matekórát nem láttam, én csak matematikára emlékszem...

miért kellene egy negatív számot zárójelezni?

ha önmagában szerepel, akkor is zárójelezed?

ha mondjuk van egy negatív számokat is tartalmazó számtani sorozatod, annak az (felsorolt) elemeit hogyan írod le?

vagy fordítsuk meg: szerinted a "-6 + 6" kifejezés akkor helyes-e, és miért? egyáltalán mit is "jelent"?

szerintem az a gond, hogy elbeszélünk egymás mellett: szerintem egy negatív számot literálként le lehet írni, mások szerint meg mindenképpen unáris műveletről van szó,

Ha vessző van közte akkor jó, -5,-8,-2,-4 stb.a -6+6 is jó, viszont a 6+-6 nem jó, meg mást is jelentene, így gépen. 6+(-6)Mindig így szokták írni, mindenhol, ott nem hagyhatod el a zárójelet.

viszont a 6+-6 nem jó, meg mást is jelentene, így gépen.

mit jelentene szerinted? vagy én vesztettem el a fonalat?

azt aláírom, hogy egy programszövegben pont a félreértések elkerülése miatt (is) zárójelezünk, meg lejjebb már leírtam, hogy valamilyen szempontból igazat adok a téma indítójának, de...

6+-6 így gépen a átlában "6 plusz mínusz 6" helyett szokott lenni mert a megfelelő karakter nincs alap billentyűzeten. Igazából meg ilyet úgyse írunk le, hogy 6+(-6) hanem egyből 6-6 lesz. A -6^2 vagy -6**2 az viszont egyértelműen -36

általában, de pont ezért "jobb" talán valamilyen kifejezőbb írásmódot találni, ha már nem tudjuk a bevinni a ±-t (lehet, hogy nem mindenkinél fog jól megjelenni ez a karakter, előnézetben nálam rendben volt), pld. szerintem "jobb" a +/- "formát" használni, azaz 6+/-6, de nyilván másnak-máshol meg úgy kézenfekvőbb, ahogyan te írtad, gondolod,

nekem továbbra sem egyértelmű, mert szerintem nem lehet a "környezettől" elvonatkoztatni, és ez okozza a "gondot", hogy egy hasonló, de más környezetben megpróbáltuk ugyanazt alkalmazni,

pld. a google online táblázatkezelője is 36-ot ad a "=-6^2" kifejezés eredményeként,

"matekórát nem láttam, én csak matematikára emlékszem..."

Verd ki, mert mar nagyon ciki amit csinalsz

nem a témához tartozik, de nyugodtan kiverheted az elmented oldaladra, ha már úgy szoktad.... értem én, hogy kompenzálni akarsz, de...

privátban megírhatnád, hogy miért is ciki szerinted, talán tanulok belőle, köszönöm,

ott "tévedsz", meg szerintem a téma indítója is, hogy szó sincs negálásról, a -6 a leírt formájában egy literál, a "mínusz hat", és semmilyen műveleti jelről, operátorról nincs szó ebben az esetben, azaz szó sincs negálásról, szerintem

Lehetne akár így is, de jellemzően a parserekben a '-' egy egyoperandusú prefix operátorként van definiálva, az integer pedig egy számmal kezdődő karaktersorozat (tehát eredendően pozitív).

Például itt egy grammar file PL/SQL-hez:.

A numerikus konstansban nem szerepel se '-' vagy '+' prefix:
TOKEN : /* Numeric Constants */
{
< S_NUMBER: <FLOAT>
| <FLOAT> ( ["e","E"] ([ "-","+"])? <FLOAT> )?
>
| < #FLOAT: <INTEGER>
| <INTEGER> ( "." <INTEGER> )?
| "." <INTEGER>
>
| < #INTEGER: ( <DIGIT> )+ >
| < #DIGIT: ["0" - "9"] >
}

Később egytagú kifejezésként definiálja a negálást, aminek a paramétere lehet konstans is:
void PlSqlUnaryExpression():
{}
{
(("+" | "-") PlSqlPrimaryExpression())
|
PlSqlPrimaryExpression()
}

void PlSqlPrimaryExpression():
{}
{
<S_NUMBER>
| <S_CHAR_LITERAL>
[...]
}

igazad van a programnyelvekkel parserekkel kapcsolatban, most belenéztem egy sor referenciába (Algol-60, Ada, C++, ...) és mindenhol azt írják amire utalsz,

ma is tanultunk valamit (pedig régebben írtam pár parsert, de ezek szerint vagy szenilis vagyok, vagy ...)

"A műveleti sorrend értelmében a hatványozás előbb végzendő el, mint a -1-gyel való szorzás, márpedig itt a '-' jel azt jelenti."

Abban igazad van, hogy a -6 felírható mint -1*6, ahol tévedsz, az az, hogy a -1*6^ nem ugyanaz, mint a -6^. Indoklom: a -6 leírásakor a -1*6 művelet már elvégzésre került, ezért semmi nem indokolja azt, hogy ismét szétbontsd a már elvégzett szorzás eredményét. Ezen a ponton viszont ha mégis szét akarod bontani, akkor a helyes szétbontás menete: -6^2 = (-1*6)^2 = -1^2*6^2
Ha a te gondolatmenetednél maradok, akkor a -6 úgyis felírható, mint -2*3. Ha most a -6^2 úgy írom fel, mint -2*3^2, akkor elég jól láthatóan hibát követek el, már nem csak az előjel fog megváltozni, de az érték is. Miért is? Azért mert a hatványozás magasabb precedenciájú, mint a szorzás. Ha így akarod "széthúzni" a kifejezést, megteheted, csak akkor amit "kihúzol" belőle, azt is hatványozni kell. Viszont ekkor ha úgy írod fel, mint -2^2*3^2, akkor az eredmény is jó lesz és az előjel is megváltozik.

A matematikaban a megszokott jeloles az az hogy -1^2 az -1. (-1)^2 az 1. Ezt mar font is irtam ez egy megszokott jeloles. Felesleges raciot keresni ebben vagy az ellenkezojeben. Excelben pl nem ez a konvencio. Pl - haskellben meg pont ez.

Ez az állítás azért téves, mert a matematikának van egy olyan ága, amit úgy hívnak, hogy komplex számok. Itt megjelenik az "i", mint immaginárius egység. Ez azért fontos, mert ennek a szigorúan elméleti számnak az önmagával alkotott szorzata -1. Innen kezdve az i^2 = -1, de pont emiatt a -1^2 = 1. Innen kezdve ha a -6^2 eredményeképpen -36-ot akarok kapni, akkor az -6i^2, vagy komplex szám formában (-6, 1)^2.

„komplex szám formában (-6, 1)^2.”

Ezen még dolgozz egy kicsit. :-)

-----
(&%;_98\<|{3W10Tut,P0/on&Jkj"Fg}|B/!~}|{z(8qv55sr1C/n--k**;gfe$$5a!BB]\.-

Miért tenném? Ezt már nálam okosabbak megtették. :-)

bug report to Wolfram Mathematica + haskell.org sent ;)

Nagyon helyes! :-)

"ennek a szigorúan elméleti számnak" Ezen besírtam, vannak gyakorlati számok is?

"Innen kezdve az i^2 = -1, de pont emiatt a -1^2 = 1" Hogy mi?

"-6i^2, vagy komplex szám formában (-6, 1)^2" ??? -6i^2 (ami tényleg komplex szám) az +6, (-6,1)^2 az pedig 37 (mivel ez egy vektor)

ha már szóba hoztátok, meg a WolframAlpha-t is, akkor nem pont neked szól, de kicsit még "trollkodnék", azaz kavarnám az "indulatokat":
(-6, i) * (-6, i)
(-6, i)**2

(-6,i) * (-6,i) az két CxC vektor (komplex koordinátájú) szorzata, amit skaláris szorzatnak vett a Wolfram
(6,i)**2 az meg egy vektor hatványozása, ami nem igazán van definiálva a lineáris algebrában, a Wolfram meg jobb híján koordinátánként négyzetre emelt

Mi itt a gond?

nincs semmi gond, úgy van ahogy írtad, csak korábban a WolframAlpha-ra hivatkozva ezt is írtad: "A matematikában így értik.", azaz mintha a WolframAlpha-val akarnád igazolni a matematikai értelmezést,

és most azt írod, hogy a hatványozás a lineáris algebrában nem igazán van definiálva, ezért a WolframAlpha jobb híján adott valamilyen választ a nem átgondolt kérdésemre, és nem azt mondta, hogy "nem érti" mit is akarok,

szóval akkor most hogy is van ez? ezek szerint, akkor mégiscsak van értelme a matematikában a hatványozásnak a ℂ²-n, mert a WolframAlpha tudja értelmezni?

költői kérdés, nyilván ugyanarra gondolunk...

apropó, nem szándékosan "írtam el", jobb lett volna talán, ha nem ℂ² példákat írok, hanem ℝ²-ben maradok, mert akkor a halmazelméleti modellre lehetne hivatkozni, és akkor talán elgondolkodhatunk azon is, hogy a már korábban Zs által felírt alakot (-6,1) is csak vektornak fogja a WolframAlpha kezelni, azaz (-6,1)^2 kérésre {36,1} lesz a válasza, a (-6+i)^2-re meg persze megkapjuk a helyes 35-12i-t (amely persze 37-es rádiusszal rendelkezik, ahogyan iattilagy megjegyezte),

persze itt sincs semmi gond, hiszen csak arról van szó, hogy nem jól fogalmaztuk meg a feladatot a WolframAlpha-nak,

Lineáris algebrában is szokták értelmezni az ú.n. pontonkénti műveleteket. Csak azért furcsa, mert a legtöbbet síkbeli/térbeli/téridőbeli fizikai mennyiségeket leíró vektorokkal találkozunk, ahol a "szokásos" vektorműveletek (skaláris szorzás, vektoriális szorzat) jó tulajdonsága, hogy az eredmény kovariáns (azaz, ha kiszámolok valamit, majd elvégzek egy koordinátatranszformációt, vagy ha előbb végzem el a koordinátatranszformációt és utána a műveleteket, akkor ugyanazt kapom), míg a pontonkénti műveletek nem azok.

De: tfh egy vektorban tárolom valamilyen legyártandó korongok sugarait: r=(r1,r2, ...),
akkor a területük pi r^2 = (pi r1^2, pi r2^2, ...), a térfogatuk pi r^2 h, ahol h a vastagság, a tömeg pedig
rho pi r^2 h, az össztömeg (rho pi r^2 h).(1,1, ...).

Hat ez a topik igy ahogy van megert egy right click, save page as gombot. Gratula!

Hint: -6^2 altalaban (-6)^2, nem pedig -(6^2) amit te varnal.

-6^2=36 szerinted? Nem programnyelvekben (ez tisztázódott közben, hogy ott többnyire igen, én azt hittem, csak néha), nem táblázatkezelőben (az meg a kérdésfelvetés pillanatában is világos volt, hiszen láttam), hanem úgy általában? Mert akkor én is rögzítem itt a kedves hozzászólásod.

"úgy általában" nem ír le ilyet az ember. A kalap karaktert programozási nyelvekben és táblázatkezelőkben használjuk. "Úgy általban" kalap nincs, a kettes feljebb kerül és kisebb lesz.

És ismét: az, hogy a -6² mit jelent, definíció kérdése. Lehet így is, úgy is definiálni. Nincs levezethető, bebizonyítható helyes és helytelen válasz.

Arról beszélek én is. De mégis csak van egy általánosan elfogadott definíció. A gyökvonást is _lehet_ úgy definiálni, hogy osztok kettővel, de azért mégis tudjuk, mire gondoljunk gyökjelet látva.

Van általánosan elfogadott definíció? Biztos vagy benne? Vagy csak azért hiszed annak az általad kedveltet, mert általános iskolában Marika néni azt tanította neked, és ezért azt hitted hogy akkor minden országban, minden általános iskolában így tanítják?

Én úgy sejtem, hogy ez tipikusan az a terület, ahol ha az egyik jelölésmód világszerte egyértelműen jóval elterjedtebb lenne a másiknál, akkor a másik kihal; például programozási nyelvek nem választják azt. Szerintem azért terjedt el mindkettő és lett ekkora kuszaság, mert mindig is huzavona volt a kettő közt és közel ugyanannyira voltak népszerűek.

[Troll] Miért?
1. Mert az élet kegyetlen.
2. Mert Murphy törvénye érvényesült.
Tehát: zárójelezd úgy, hogy ne lehessen félreérteni.
[/Troll]

Egyesek úgy vélik, hogy a hatványozás erősebb a kivonásnál, ezért -36 kellene hogy legyen az eredmény.

Mások úgy vélik, hogy az egyoperandusú "-" eltér a kétoperandusútól, és szorosabban kötődik a számhoz, vagyis a (-6)-ot emeled négyzetre, az eredmény 36.

A programozási nyelvek, parancssori eszközök stb. kábé fele így, fele úgy látja a világot.

Szopás. C'est la vie. Nem hinném, hogy bármelyiknek jobban igaza van, mint a másiknak. Ettől még gáz, hogy nincs egy egységes álláspont, de hát ha nincs, akkor nincs.

szerintem nem vagyok egyedül a véleményemmel, azzal, hogyha egyszerűen leírod ezt: -6, akkor semmiféle kivonásról, operátorról nincs szó, hanem arról a számról az egész számok halmazában, amelyet a 6-hoz hozzáadva 0-t kapunk, azaz a 6 + x = 0 "megoldásáról", amely a természetes számok halmazának nem eleme, és ezért is(?) bővítettük azt a halmazt,

egyes programozási nyelvek persze valójában negatív számot önmagában literálként "nem értelmeznek", hanem mindenképpen unáris műveleti jelnek fogják tekinteni azt a jelet, amelyet valójában előjelnek "kellene" venni, lásd az általam idézett Fortran példát,

azt "aláírom", a téma indító "védelmében", hogy pld. megnézve egy olyan ismertebb matematikai formulát, ahol belebotolhatunk egy negatív szám hatványába, pld. nézzük a szinusz Taylor-sorát, ott a (-1)**n-et (n=0, 1, 2...) zárójelezni szokás, pedig közben egyértelmű lenne, hogy -1**n-ként felírva, ha annak a helyes értelmezése -(1**n), akkor nem lenne "világos", hogy miért is van szükség a hatványozásra, stb.,

Szerintem eddig ez a legjobb válasz. Csak annyit tennék hozzá, hogy matematikában/fizikában van általánosan elfogadott konvenció, és az bizony az, ahol a hatványozást kell előbb elvégezni. Egyetlen olyan szakcikket sem láttam, ami ne így használná. De a kalap nem kitevő, a programozás nem matematika, az élet nem habostorta.

No de nekem itt többen azt bizonygatják (egyesek finom sértegetéssel vegyítve), hogy a matematikában is -6^2=36.

Jótékonykodj, küldj nekik négyjegyű függvénytáblázatot!

felreolvastam :) igy viszont +1

Na hat oszkar most mar latod, hogy miert van ez az erdekesseg. Az informatikusok nem matematikusok. De jo nagy a pofajuk!

pont ez, tesztelve vagy szazfele cuccal:

http://macnauchtan.com/pub/precedence.html

Libreoffice scalc cellába beírva: -6^2
36
Gnumeric eredménye is plusz 36.

És a többi esetén? Lássuk:

$ luajit
> = -6^2
-36

octave:1> -6**2
ans = -36

$ perl
print -6**2
-36

$ php5
<?php echo -6**2; ?>
-36

$ python3
>>> -6**2
-36

$ ruby
print -6**2
-36

Amely pozitív eredményű:
$ bc -l
-6^2
36
.
bash:$ echo $[-6**2]
36

Ez is pluszos. A matekórán tanultak szerint az előjel nagyobb prioritású, mint a hatványozás. De akkor a többi miért fordítva dolgozik?

Ha a matekórán azt tanítanák, az előjel nagyobb prioritású, mint a hatványozás, akkor miért írnának ilyeneket a hülye matematikusok: (-1)^n? Csak nem azért, mert a matematikában ez mást jelent, mint -1^n? ;-)

A matematika leíró nyelve nem egyértelmű. Országonként, kultúránként, tankönvenyként, tanáronként, szituációnként, programozási nyelvenként eltérő lehet.

Amerikában az 1-est kézírással pálcikaként írják, és a 7-esük kísértetiesen hasonlít a mi 1-esünkre. Ha a 7-est áthúzod középen vízszintesen, azt ők már nem ismerik fel.

Mi tanultunk olyat (is) általánosban, hogy az unáris mínusz (amiről ezt a téma szól) az a kivonás helyett egy rövidebb és magasabban lévő, szinte alig észrevehető vonalka.

Ott van a "/", ami sok esetben valós osztást, sok esetben pedig egész osztást jelent. Negatív számból indulva ki megintcsak eltérnek a programnyelvek abban hogy merre kerekít, illetve a modulus (%) negatív vagy pozitív lesz.

Aztán ott van a híres-hírhedt 6÷2(1+2) esete: http://www.mathmagical.co.uk/Mathematics/CalcPuz.html

A természetes számok halmazába hol beleértik a 0-t, hol nem.

A négyzetgyökvonás eredménye legfeljebb egy szám – egészen addig, amíg ki nem lépünk a komplexek körébe, akkor hirtelen már egy történetesen pozitív valósra sikeredett számnak is két négyzetgyöke lesz.

Tizedespont–tizedesvessző. Ezresenként elválasztó karakter. Végtelen ismétlődő tizedesjegy(ek) jelölése. Oly sok variáció van rájuk!

Satöbbi, satöbbi, satöbbi...

A jelen szituáció is csak egy a sok ilyen közül. Nincs itt semmi látnivaló kérem, haladjanak tovább!

+1

6÷2(1+2) -- szép baleset.
Matekórán azt tanították, hogy azonos precedenciájú az osztás és a szorzás.
Ez esetben egyértelműen balról jobbra kell kiértékelni.

Az ismertetett első generációs "okos"számológép valószínűleg verem alapú kiértékelőt alkalmazott és itt ezt elrontották benne, hiszen a veremből jobbról balra lett az azonos precedencia kiértékelve.

A gyok(4) = +/-2 tényleg kettős értéket ad, ahogy a gyok(-4) is 0 + j(+/-2) eredményt. Ez a kettős eredmény tényleg benne van a matekban.

De azért ha azt látod leírva, hogy ab/cd, őszintén, az jut eszedbe, hogy összeszorzod az a-t és a b-t, elosztod c-vel, majd ezt a részeredményt _megszorzod_ d-vel? Mert nekem nem ez ugrana be, még ha szigorúan véve valószínűleg ez is a helyes. Következetés: ha esetleg félreérthető, vagy ha a szigorú matematikai értelmezés nem egyezik a "természetessel", tegyük egyértelművé zárójelezéssel.

Ha a valós számok halmazán dolgozunk, négyzetgyök alatt általában csak legfeljebb egy értéket (a nemnegatívat) értünk.

Ami bosszantóbb és több hiba melegágya:

c = 8<<1 + 1;
d = 8*2 + 1;

Eredmény: c: 32 illetve d: 17, mivel a shift kisebb precedenciájú az összeadásnál, holott logikailag a shiftelés a 2^n szorzás (ill jobbra 2^n osztás) aritmetikázásnál kisebb költségű megvalósítása.

Operátor precedenciáról bővebben: http://en.cppreference.com/w/c/language/operator_precedence

Ez így van, K&R (tapasztalat hiányában, gondolom) nem a legszerencsésebb precedenciát alkották meg. Utólag könnyű volna :)

Ha azt látom leírva, hogy ab/cd, akkor nekem egy magyar AC/DC feldolgozászenekar jut eszembe. :-D

(ON: Azért ez matematikailag egyértelmű, bár könnyen benézhető valóban.)

:D

Az a/bc az a ritka kellemetlen eset, amikor elvileg van rá szabály (a matematikusok szerint): balról jobbra, de pl. a fizikusok nagyobbik fele a/bc-n a/(bc)-t ért.

A négyzetgyök még szebb, mert egy rendes burbakista matematikus az "Egy komplex számnak két négyzetgyöke van." kijelentés után már kérné is az indexedet. Ő ragaszkodna hozzá, hogy nincsen egy komplex négyzetgyök függvény, hanem sok-sok komplex négyzetgyökfüggvény értelmezhető, a komplex síkot egy eléggé tetszőleges, önmagát nem metsző görbe mentén a 0 és a végtelen között felvágva.
(Valamint kiterjeszthető a négyzetgyök-függvény Riemann-felületre, amit úgy kapsz, hogy kétszer veszed a felvágott komples síkot, a vonal mentén az alsót a felsővel összeragasztod, úgy, hogy az alsó balpartjához a felső jobbpartját, és fordítva. Ekkor az "alsó 1" gyöke lesz pl. 1, a "felső 1"-é -1.)

Hát ebből nem sokat értettem :D

Számomra matematikailag ez helyes.
-62 = -6^2 = -6*-6 = (-6)^2 = 36 <> -(62) = -(6^2) és semmiképp sem -6*6

Azért a számomra meg a matematikailag furi egy mondatban.

Úgy gondolom azoknak is így helyes, akik velem együtt tanultak matematikát. Ezt persze nem tudhatom biztosan, de nem végeztem felmérést a témában :)

Válasz lentebb, nem ismétlem meg feleslegesen.a

Én most azt gondolom, hogy fogjuk rá a hülye Microsoftra ezt is: https://bz.apache.org/ooo/show_bug.cgi?id=26755, illetve onnan tovább: http://support.microsoft.com/hu-hu/kb/132686/en-us

11(!) éve nyitott bug az OpenOffice-ban, ami alapján a hülye precedenciát az Excelből vették át kompatibilitási okokból.

A válasz röviden: mert csak. Elismerik, hogy félrevezető, mert matematikailag nem helyes, de csak workaround-ot javasolnak.

--

Azt azért valljuk be, hogy a kompatibilitás ilyen esetben nagy úr! Ugyanaz a művelet nem árt, ha ugyanazt az eredményt adja különböző táblázatkezelőkben, ha megnyitják egymás file-jait.

Az is megolsás lenne, ha a konverziókor bezárójelezné.

Na ja, az egyértelművé tenné.

Nem jó megoldás... mi van, ha scriptezve van a táblázat, és on-the-fly állítja elő kódból a cellafüggvényt? Akkor mikor történjen meg a javítás, amikor a makró értéket ad a cellának? És mi van, ha visszaolvassa? Tároljuk el neki azt is, amit berakott, csak hogy visszakaphassa (mondjuk egy read-modify-write művelethez), vagy a javítottat adjuk vissza (ekkor ugye másképp fog viselkedni a két környezet)? És mi történjen, ha az editorban valaki beleír a cella tartalmába (a függvénybe)? Azt "antikonvertáljuk" a makrónak?
Szóval this is a can full of worms...

Itt a megoldás egy többéves deprecation folyamat lenne hatalmas warningokkal, majd a évek (évtizedek?) után a kétértelmű formula elutasítása, majd újabb évek (évtizedek?) után újra lehetne engedélyezni, immár a másik értelmezéssel.

ah. igy mar ertem a 'szabvanyban levo "csinald ugy, mint az excel 95" megfogalmazast.

A kérdésed - hogy miért van különbség az implementációkban - szerintem jogos és érdekes!

Hogy fokozzam a hangulatot, a kiértékelési sorrend sem stimmel:

Excel: 2^3^2 = 64
Holott: 23(sup)2(/sup)=512

:)

Igen, a hatvanyozas elegge jobb-asszociativ. De legalabb ezt a programnyelvek jol es/vagy egysegesen tudjak:

gnuplot> print 2**3**2
512
$ bc
2^3^2
512
$ perl
print 2**3**2
512

A hagyományos papíralapú jelölésrendszerben (ahol a kitevő följebb csúszik) teljesen logikus a hatványozást jobb-asszociatívként definiálni. A balról zárójelezett verzió ugyanis emeletes hatvány helyett sima egyszintű hatványként is felhírható, hiszen
(((a^b)^c)^d)^e = a^(b*c*d*e)

Logikus tehát, hogy a függőlegesen helypazarló emeletes hatvány zárójelezés nélkül pont azt jelentse, amire nincs egyszerűbb írásmód.

A számítógépes írásmódban pedig érthető, hogy áthozzák a megszokott koncepciót. Habár ha ez a jelölésmód jelent volna meg elsőre, talán nem lenne ilyen könnyű döntés hogy melyiket is válasszuk. Hiszen bármelyiket is választjuk, ha a másikra van szükség akkor zárójelezni kell, így "átlagosan" nem nyerünk vagy veszítünk a leírás bonyolultságán egyik vagy másik hozzáállással. És mint látjuk, ez egy újabb terület ahol nem egységes a viselkedés, <irónia>hurrá!</irónia>

Állatorvosi ló ismét van:

$ luajit
> = 2^3^2
512

octave:1> 2**3**2
ans = 64

$ perl
print 2**3**2
512

$ php5
<?php echo 2**3**2; ?>
512

$ python3
>>> 2**3**2
512

$ ruby
print 2**3**2
512

$ bc -l
2^3^2
512

bash:$ echo $[2**3**2]
512

Ha az A1 cella értéke -6, akkor a B1 cellába írt A1^2 képletnek mi legyen az eredménye?

Ez egy másik dolog. Itt arról volt szó, hogy ha egy képletbe van írva, azt hogyan kellene értelmezni a parsernek.

A1^2-be A1 helyébe beírjuk a -6-ot. Ha nem is ugyanaz az eset, annyira azért talán nem különböző.
Csak arra próbáltam volna rávilágítani, hogy a táblázatkezelők a -6 -ot egy egységként kezelik, nem pedig (-1)*6-ként. Ugyanúgy az A1 mezőt is egy egységként kezelik.
Szerintem ez lehet a ráció.

A négyzetre emelés függvény nem csinálhat mást, mint a mindenki által egyetértett definíció szerint négyzetre emel, és így a -6-ból 36 lesz. Senki sem veti fel, hogy a -6 négyzete esetleg -36 lenne. És itt adott egy szám, ami a -6, és ezt kell négyzetre emelni. Az, hogy egy másik cellából jön az érték, teljesen egyértelművé teszi a műveletek elvégzésének sorrendjét (először kell megalkotni a -6-ot, aztán ezt négyzetre emelni). A -6^2 jelölésben ez a sorrend nem egyértelmű, erről szól a vita. Az A1=-6; B1 = A1^2 jelölés viszont, pont mintha zárójeleznél, az értelmezési sorrendet egyértelműsíti.

Pontosan. És ezt mondom, hogy ezek a programok a -6 számot egy "egységként" értelmezik, nem pedig egy "előjel és egy szám"-ként vagy "nullából hat"-ként

Lehet, viszont az elméleted a viselkedésüket egyáltalán nem magyarázza - legfeljebb azzal a kiegészítéssel, hogy a negatív előjel hamarabb értékelődik ki, mint a hatványozás.

Nem csak elmélet, és pontosan megmagyarázza: éppen arról van szó, hogy a konkrét parser felépítése miatt a "-" prefixet magasabb precedenciával értékeli, mint kellene.

Tehát lényegében ugyanazt mondjuk - csak te elméleti (oksági) oldalról közelíted, én meg "tapasztalati" oldalról :)

A hatása ebben az esetben kétségtelenül ugyanaz, mintha a "-6" egyetlen token lenne.

Azért nem tartom valószínűnek, hogy egy token - Excel forrása nincs meg -, mert szerintem valamivel bonyolultabb úgy megírni a parsert, hogy a "-" prefix része a konstansnak, és még van prefix operátor is. De ez csak tipp.

No, ehhez viszont kb. semennyire se értek.

Szerintem egyértelmű.
Ha 6 négyzetének a negáltját akarod leírni, akkor azt papiron így írod: -(62)
Ha pedig -6 négyzetét, akkor így: -62

Nem mert a hatványozás precedenciája, még a szorzásnál is magasabb, nem, hogy a kivonásnál.

Ez nyilvánvalóan csak 36 lehet.

A helyettesítés a jelentésre, konkrét értékre történik; vagy ha csak bután szintaktikailag helyettesítesz, akkor pedig zárójelezni kell, tehát (-6)^2.

Ha az A1 cella értéke 1+5, akkor sem merül fel a lehetőség, hogy a helyettesítés után ebből esetleg 1+5^2 = 26 lenne, ez nyilván baromság.

Vesd össze C-ben a #define cuccal, ami csak szintaktikailag helyettesít:
#define A1 1 + 5
#define B1 A1 * A1
Na ez tök hülyeség lesz [1 + 5 * 1 + 5 = 1 + 5 + 5 = 11], ezért tanítják, hogy a #define során zárójelezni kell:
#define A1 (1 + 5)
#define B1 (A1 * A1)
Ez már 36.

Ide is ezt a válaszomat kéretik beírni :)

+1

Feldobnék egy kissé új témát. Fent már érintőlegesen felhoztam.

Mit jelent az unáris (tehát nem két szám közé, hanem egy szám vagy változó elé írt) mínusz jel? Nullából vonunk ki, vagy mínusz eggyel szorzunk?

A -6 az a 0-6, vagy a (-1)*6 rövid alakja?

A -x az a 0-x, vagy a (-1)*x rövid alakja?

Fent sokan az egyiket, sokan a másikat említitek, és valószínűleg legtöbbeteknek fel sem tűnt a kettősség.

Szerintem a nullából kivonás a helyes válasz, és erre két érvem van.

Az egyik: a negatív számokat úgy is tudod definiálni, hogy szorzás műveleted még nincs is. Esetleg nem is lesz. (Vagy például egy A mátrixhoz tudsz készíteni -A mátrixot, a nullmátrixból kivonva, de mi lenne az a "-1" mátrix, amivel megszoroznád? Vigyázz: nemcsak négyzetes lehet a mátrix. Vagy bármilyen algebrai csoport, ahol csak egyetlen műveleted lesz, amit összeadásnak hívsz, és az arra nézve az "a" elem inverzét "-a"-ként jelölöd.)

A másik: a (-1)-gyel való szorzás az egy önmagába harapó definíció. Mi a -6? Hát (-1)*6. Oké, de akkor mi a -1? Hát az pedig (-1)*1. Jó, de akkor mi a -1?

Szerintem a -6 számot -6-ként kell kezelni.
Az érvem: még (egyetemen) algebrából tanultunk valami olyasmit, hogy hogyan lehet felépíteni axiomatikusan a természetes számokat, majd persze ezekből a többi számhalmazt. Abban volt egy olyasmi fogalom, hogy "rákövetkező", amelynek van néhány tulajdonsága, miszerint minden számnak pontosan egy rákövetkezője van és ha két szám rákövetkezője megegyezik, akkor a két szám is megegyezik. Ekkor elegendő az 1-es számot "definiálni". A kettő az 1-nek a rákövetkezője, és így tovább.
Ezekből az axiómákból (ill. amiket kihagytam) a kommutativitás, asszociativitás is levezethető.

Szóval ezzel csak azt akarom mondani, hogy nem feltétlen kötelező ennyire "axiomatizálni" a dolgokat, a -6-ot lehet egyszerűen -6-ként kezelni, mindenféle plusz körmönfont definíció nélkül.

Nem véletlenül tettem fel külön ezt a kérdést a "-6"-ra és a "-x"-re. "-6"-ra elképzelhetőnek tartom azt a választ, hogy az csak úgy valahol van és kész. De "-x"-re ez már nem működhet, ott már tudnod kell "x"-ből kiindulva kiszámolni az értékét valahogy.

Ha a -6-ot érted, akkor a -x-et ennek analógiájára :)

Nem értelek.

Van egy számom, x-szel jelölöm. Franc se tudja, hogy mennyi. Lehet, hogy tizenhét egész három tized. Szükségem volna a "-x"-re. A _definíció_ szerint mit csináljak: vonjam ki nullából, vagy szorozzam meg -1-gyel, vagy valami más?

Nem látom, hogy ezt megválaszoltad volna.

Idézet:
Nem látom, hogy ezt megválaszoltad volna.

Jól látod, hogy nem látod. De a szmájlit a végén láthattad volna ;)

jogos ;)

Kicsit komolyabbra fordítva a szót: matematikailag szerintem édesmindegy, hogy a -x az az x -1-szerese vagy pedig 0-ból kivonva az x-et - mindkettő ugyanazt eredményezi (műveleti tulajdonságokat is beleértve).

Az, hogy a táblázatkezelők hogyan kezelik ezt, más tészta, az már a programozó egyéni hülyesége döntése.

> Mit jelent az unáris (tehát nem két szám közé, hanem egy szám vagy változó elé írt) mínusz jel? Nullából vonunk ki, vagy mínusz eggyel szorzunk?

Ennek a kérdésnek akkor lenne értelme, ha mondanál egy olyan esetet, amikor ez a kettő nem azonos eredményt ad.

"Ha egy táblázatkezelőben beírom ezt: =-6^2, miért 36 az eredmény?

"(A műveleti sorrend értelmében a hatványozás előbb végzendő el, mint a -1-gyel való szorzás, márpedig itt a '-' jel azt jelenti. A kérdésem csak annyi, hogy mi a ráció ugyan ebben, hogy nem a matematikának megfelelő módon értik, hanem mintha (-6)^2-t írnék.)"

A matematikaban a '-' jel ket jelentessel bir megallapodas szerint:
1) amikor azt fejezi ki, hogy egy valos szam negativ, azaz kisebb 0-nal
2) muveleti jel: a kivonast ertjuk alatta

pl. egy negativ szam kifejezheto (matematikaban hasznalatos jelolesrendszerrel):
- ellentett kepzessel: -a = (-1 * a) : itt a '-' jel magat a negativ szamot jelenti
- kivonassal: -a = (0 - a) : itt a masodik '-' jel a kivonast mint matematikai muveletet jelenti, az elso pedig az 'a' szamot mint negativ szamot reprezentalja

Az, hogy egy talblazatkezelo, programozasi nyelv hogyan ertelmez egy adott jel sorozatok - az implementacio kerdese. Hogy miert ugy implemetaltak, ahogy; nos azt maguk a fejlesztok tudjak megmondani csak. Mivel a tablazatkezelo alkamazasokat, de altalaban minden alkalmazast, emberek kezelnek, szamukra az iskolaban tanult ertelmezes a megszokott es a legkonnyebben alkalmazhato.

Ha a (-6) -ot szorzataira bontod, akkor tagonként kell négyzetreemelni
és úgy összeszorozni. Vagyis:

ha (-6) = (-1)*(+6)
akkor (-6)^2 = (-1)^2 * (+6)^2

Ha eddig érthető, akkor rendben van, csak el kell végezni a műveletet.
Ha nem érthető, akkor abbahagyhatjuk.

> Sol omnibus lucet.

Ez triviálisan igaz, de nem a kérdésre válaszoltál, mert már az első sorban "hibát" vétettél. A kérdés pont arra megy ki, hogy a -6 bezárójelezendő-e egyáltalán vagy sem. Az Excel szerint igen, a matematikai jelölés szerint nem, programnyelvek és egyéb eszközök között szintén változó, univerzális válasz tehát nincs. Tök igaz, hogy (-6)^2=36 és -(6^2)=-36, de pont az a kérdés, hogy melyiket szeressük, és erre pont nincs jó válasz.

--

Azt akartam megmutatni, ha egy ábrázolást többféleképpen értelmezünk,
akkor az adott értelmezéshez kell igazítani az ábrázoláson elvégzett
műveletet is. Az nem megy, hogy bevezetjük a baloldali közlekedést,
egyelőre csak a teherautók számára.

Ebből az aspektusból a példa szerintem jó.

> Sol omnibus lucet.

Idézet:
tagonként kell négyzetreemelni

Legyen már inkább tényezőnként. A tagonkénti négyzetreemelést a matektanár keményen bünteti (kivéve kettes karakterisztikájú testek esetén).

Késő, nem tudom javítani. (-:: A matekban nincs demokrácia, legyen hát tényező.

> Sol omnibus lucet.

Azért értékelem a szándékot :)

-6 egy szám, amihez nem nyúl. -6*-6=36

Amit te szeretnél: -(6^2)

-fs-
Az olyan tárgyakat, amik képesek az mc futtatására, munkaeszköznek nevezzük.
/usr/lib/libasound.so --gágágágá --lilaliba

Akkor légyszíves küldj egy bugreportot a komoly matematikai szoftverek szerzőjének, mert azokban egységesen -6^2=-36 (SAGE, Mathematica, GP-PARI, Maple, Maxima, GNU R, stb. kipróbálva). Meg általános és középiskolában is. De biztos az Excel jobban ismeri a matematikát, meg a különféle (nem matematikai) programozási nyelvek (amik persze olyan precedenciát használnak, amilyet óhajtanak, az ember meg alkazmakodjon az eszközhöz, ez világos), de ez a matematikát nem befolyásolja.

Meg ide is beírhatom, hogy gondolj légyszíves a -x^2 függvényre te is.

Vagy gondolj bele, hogy ha egyértelmű, akkor miért kell bezárójelezni a (-1)^n kifejezést?

Vagy nézd meg az angol/német wikipédia műveleti sorrend lapját (ezen a két nyelven kifejezetten van ilyen példa)!

Vagy olvasd végig ezt!

Vagy olvasgasd a kicsit lentebb hivatkozott matekkönyveket általános iskolától egyetemi matekszakig bezárólag!

Vagy kérdezz meg egy matematikust (bár én is azzal foglalkozom, de azért meg is tettem, hátha egész életemben hülyeséget tanultam/tanítottam, sose lehet tudni)!

Szerintem hagyd. A matematika (legalábbis ez az alapvető része mindenképpen) nem értelmezés kérdése, teljesen egyértelmű a szabály. Még az általam fentebb idézett Microsoft cikk is elismeri, hogy az Excel nem e szerint működik, és ez nem a megszokott precedencia, ez a része is tök egyértelmű.

--

Tanulság: használjunk redundáns zárójeleket, úgy tűnik, az működik, függetlenül attól, hogy melyik program mit, hogyan akar értelmezni.

-fs-
Az olyan tárgyakat, amik képesek az mc futtatására, munkaeszköznek nevezzük.
/usr/lib/libasound.so --gágágágá --lilaliba

Ja, hogy te úgy értetted, hogy az Excel-t hogyan vegyem rá, hogy azt számolja, amit szeretnék. Ez világos volt eddig is, hogy így meg tudom oldani, azt hittem te is arról akarsz meggyőzni, hogy -6^2=36. Akkor jónak érvelgetek, hogy a matekban hogyan kéne érteni. :-D

Mint a fentiekben írtam, vegyes a nézetem, középiskolában a -6 jellegű önmagában álló előjeles számot soha nem tettük zárojelbe, amikor négyzetre emeltük. Fellapoztam régi matekfüzeteimet. De ez nem mérvadó, a matematikusok tuti jobban tudják. Bár nem szerencsés, hogy matekórán ezek szerint tévesen tanították.
Én mindenesetre eddig különbséget tettem az

eredmény = -6^2 (előjelként a mínusz)
és a
eredmény = 0-6^2 (aritmetikai műveletként a mínusz)

De a jelen téma hatására újra kell gondoljam ezt. Szerencsére még nem okozott eddig félreszámolást.

A szintén fentebb írt shift precedencia viszont komolyabb ügy számomra, azzal sajnos már adtam ki a kezeim közül téves értéket.

Fellapoztam a középiskolás és az általános iskolás matekkönyveim, és ott mindig így van írva a negatív számok hatványozása: (-2)^5. Az Obádovics-féle matematikai összefoglaló is így használja. A Fried-féle Klasszikus és lineáris algebra is: (-a)^n.

Szerintem pont ezért teszik ki a zárójelet, hogy ne keletkezhessen ilyen vita. :))
Amúgy az első eset:
"eredmény = -6^2 (előjelként a mínusz)"
igazából a² (a=-6), egy művelet;

a második eset
"eredmény = 0-6^2 (aritmetikai műveletként a mínusz)"
a-b² (a=0, b=6), két művelet, a hatványozásé az elsőbbség.

--
Debian - The "What?!" starts not!
http://nyizsa.blogspot.com

Sosem tesznek ki felesleges zárójelet. Érdekes módon olyat nem fogsz találni, hogy (a*b)+c. Azt miért nem akarják egyértelműbbé tenni soha? Talán mert a szabály egyértelmű önmagéban is?

És ha így kellene érteni, hogy magyarázod a -x^2 parabolát? Ott is előjel!

Másrészt akár te, akár más hozna nekem egy nyomorék példát, hivatkozást, akármit, ami ezt az értelmezést támasztja alá? Én elég sokat összegyűjtöttem az enyém igazolására. Ellenkezőleg még nem láttam semmit az ég adta világon.

És végül egy konkrét, bárki által ellenőrizhető leírása a szabálynak (nem könnyű ilyet találni, pedig nyilván kismillió helyen le van írva, de rosszul kereshető): Tussy-Koenig: Prealgebra (5th edition) 174-175. oldal. Vagy egy másik (link nincs): Allen R. Angel, Elementary Algebra for College Students 8/E; Chapter 1, Section 9, Objective 3. Ez már elég? Várok akár egy darab ellentétes dolgot leíró hivatkozást!

Ez egy kivétel, és mint ilyen, implementációfüggő. És tényleg azt írja, hogy azért kell kirakni a zárójelet, hogy egyértelmű legyen.
Szóval mindenkinek igaza van, vita lezárva. :))

--
Debian - The "What?!" starts not!
http://nyizsa.blogspot.com

Nem azt írja, hogy a -a^n kivétel, hanem hogy kivételesen sok informatikai implementáció és programnyelv nem úgy értelmezi, ahogy a matematikai szabály szerint kéne. Ezért amelyik implementációnál bizonytalanok vagyunk, ott tegyünk zárójelet. De a matematikában nem kell, olyat nem is ír.

Idézet:
Sosem tesznek ki felesleges zárójelet.

Klasszikus, kicsit hasonló eset: harmonikus rezgéseknél a sin omega*t (legyen sin wt - a w hasonlít a kis omegára).
Mindig úgy tanítjuk, hogy pl. a kitérés-idő függvény A*sin wt. Nyilván úgy értendő, hogy kiszámolom az wt értékét, és annak veszem a szinuszát (nyilván radiánban). A számológépem ilyen formán beadva az w-nak számolja ki a szinuszát és azt szorozza be t-vel. Sőt, még matematikában is a "sin 2x" a "sin(2x)"-et jelenti, nem pedig a "(sin 2)x"-et.

Mikor pár éve a diákoknak nem jött ki a megfelelő eredmény a rezgőmozgás esetén, azóta inkább kiteszem a zárójelet, még akkor is, ha épp felesleges (matematikailag).

Nincs előjel mínusz, az egy kivonás, csak lehagytunk egy nullát, ahogy 006=6, úgy 0-6=-6.

Olvasd föl légy szíves, szájjal, hangosan, amit írtál!
"mínusz hat a négyzeten"
Szerintem ez 36.

--
Debian - The "What?!" starts not!
http://nyizsa.blogspot.com

Ez eddig a legbénább indok, már bocs :). És szerinted mennyi pl. "egy meg kettő per három"? Vagy ha azt hallod, hogy "egykettőháromszáz", az 3 szám vagy 4?

--

Föntebb többen is leírták értelmesebben, gondoltam hátha így menni fog, de nem. :)
Szóval itt nincs szó műveleti sorrendről, mert csak egy művelet van, a hatványozás. Az alap pedig egy negatív szám.

--
Debian - The "What?!" starts not!
http://nyizsa.blogspot.com

Neked is.

Reagálhatna már erre valaki végre...

Itt két vita folyik egyszerre:

Az egyik az, hogy egy adott környezet szintaxisa miért olyan, amilyen.
Ez egy meddő vita, mert a szintaxis a tudatunktól független objektív valóság.
Nem állunk neki filózni azon, hogy a 'C' fordító miért úgy kéri a kódot,
ahogy kéri. MEGTANULJUK hogyan kéri és kész. Ez nagyjából válasz a
topikindításra.

A másik az, hogy egy negatív számot hogyan definiálunk: (A) a nullától való
(irányult) távolsággal, vagy (B) abszolút értékének (-1)szeres szorzataként.

Én az (A) esetre hajlok annak geometriai vetülete miatt, és mert (B) esetben a
(-1) önálló definícióját elég nehéz lenne megadni, bár az én nézetem ebben
a kérdésben inkább filozófiai, mint matematikusi.

> Sol omnibus lucet.

Az elsőn nincs vita. Arra irányult a kérdésem, többen beírták, hogy ez így elég elterjedt precedencia a programnyelvek esetében. Megköszöntem a választ, nem tudtam, hogy ennyire általános.

A vita arról folyik, hogy kell érteni -6^2-t a matematikában. Az egyébként hogy a -6-ot 0-6-nak, vagy (-1)*6-nak 'definiálod', édesmindegy, nem lesz különbség.

Én a kérdést úgy értettem, hogy van-e annak valami praktikus oka, hogy bár matematikában van egy megszokott (és azt hiszem, nagyjából általánosan elfogadott) jelölésrendszer, amiben -62=-36, az excelben nem így van. Amiből jó kis flamewar lett, de azért a legvalószínűbb ok leszűrhető: az informatikusok jelentős része nem tudja a matekban szokásos eredményt, és még az is lehet, hogy matekban sem mindenki egyformán használja (bár, nyomtatásban ilyet még nem láttam).

Az informatikusok jelentős egy része nem tudja a matematikát, ellenben azt hiszi, hogy igen. És érvelni meg sem próbál, csak leugat másokat. :-(

Szerk.: Ezt jól alátámasztja a másik hasonló thread is.

Adott esetben azt is elképzelhetőnek tartom, hogy ez a kettő különböző eredményt adjon:

#1
B := -6^2

#2
A := 6
B := -A^2

Mégpedig abban az esetben, ha a lexikális elemző az elsőnél egy darab tokenként (type=integer) adja vissza a -6 -ot, a másodiknál viszont két darabként (1. type=operator, 2. type=identifier) Ha így lenne, akkor az első esetben semmiféle precedencia-összehasonlításra nem kerül sor: van egy szám azt kell hatványozni, és kész.

az alapveto felteves itt a kovetkezo: -6^2 egyszerre (-6)^2 es -(6^2) is, az hogy melyik a ketto kozul arrol megoszlanak a velemenyek es csak vizsgalat utjan tudjuk kideriteni, ezt pedig Schrodinger ur mar felvetette, kar vitatkozni rola;)