Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

-2^2

0 views
Skip to first unread message

Henning Præstegaard

unread,
Oct 20, 2002, 6:54:49 PM10/20/02
to
http://newz.dk/forum_item.php?id=23060

På dette link er der en diskution igang om
hvad regnestykket -2^2 giver. Jeg har intet
svar, men kunne forestille mig at der kunne
være et par stykker her i gruppen der synes
at problemet er interesant.

mvh
Henning


Kim Schulz

unread,
Oct 20, 2002, 7:07:05 PM10/20/02
to


der er ingen tvivl der! det bliver -4
Opløftning i potens har højere prioritet end substraktionen og det skal
derfor læses som:
-(2^2) eller -1*2*2

tænk på stykket -2^(1/2) => -sqrt(2) igen er potens før substraktion.

Jeg tror kun jeg er stødt på ganske få regnemakiner eller
computerprogrammer som ikke er enige med mig om dette.

--
Kim Schulz - Freelance Development | Life is both difficult and time
Email : kim @ schulz.dk | consuming.
Tlf : 51904262 |

Lasse Reichstein Nielsen

unread,
Oct 20, 2002, 8:31:10 PM10/20/02
to
Kim Schulz <k...@schulz.dk> writes:

> der er ingen tvivl der! det bliver -4
> Opløftning i potens har højere prioritet end substraktionen og det skal
> derfor læses som:
> -(2^2) eller -1*2*2

Unære operationer, inklusive unært minus, binder stærkere end binære
operationer, så jeg vil læse det som (-2)^2 og ikke -(2^2).

/L
--
Lasse Reichstein Nielsen - l...@hotpop.com
'Faith without judgement merely degrades the spirit divine.'

Jesper Harder

unread,
Oct 20, 2002, 8:34:35 PM10/20/02
to
Kim Schulz <k...@schulz.dk> writes:

> "Henning Præstegaard" <onkelh...@oncable.dk> wrote:
>>
>> På dette link er der en diskution igang om hvad regnestykket -2^2
>> giver.
>

> der er ingen tvivl der! det bliver -4

Ja, selvfølgelig. Det er basal folkeskolematematik.

> Jeg tror kun jeg er stødt på ganske få regnemakiner eller
> computerprogrammer som ikke er enige med mig om dette.

Det er mange måder at fejlbetjene en lommeregner på, så man får det
forkerte resultat :-) I øvrigt er det en forkert matematisk tankegang,
at tro at man kan bevise noget som helst ved at trykke på nogle taster
på et stykke elektronik eller computer.

Jesper Harder

unread,
Oct 20, 2002, 8:39:17 PM10/20/02
to
Lasse Reichstein Nielsen <l...@hotpop.com> writes:

> Kim Schulz <k...@schulz.dk> writes:
>
>> der er ingen tvivl der! det bliver -4
>> Opløftning i potens har højere prioritet end substraktionen og det skal
>> derfor læses som:
>> -(2^2) eller -1*2*2
>
> Unære operationer, inklusive unært minus, binder stærkere end binære
> operationer, så jeg vil læse det som (-2)^2 og ikke -(2^2).

Det er en forkert læsning. Du mener vel heller ikke at:

-a² = a²

Bertel Lund Hansen

unread,
Oct 21, 2002, 1:35:41 AM10/21/02
to
Lasse Reichstein Nielsen skrev:

>Unære operationer, inklusive unært minus, binder stærkere end binære
>operationer

Det er bare ikke et unært minus i udtrykket.

--
Bertel
http://bertel.lundhansen.dk/ FIDUSO: http://fiduso.dk/

Peter Makholm

unread,
Oct 21, 2002, 2:37:38 AM10/21/02
to
Bertel Lund Hansen <nos...@lundhansen.dk> writes:

> Det er bare ikke et unært minus i udtrykket.

Efter som minuset kun har et argument er det vel per definition unært?

--
Peter Makholm | We constantly have to keep in mind why natural
pe...@makholm.net | languages are good at what they're good at. And to
http://hacking.dk | never forget that Perl is a human language first,
| and a computer language second

Bertel Lund Hansen

unread,
Oct 21, 2002, 3:37:21 AM10/21/02
to
Kim Hansen skrev:

>$ perl -le'print -2**2'

Python: >>> -2**2
>>> -4

Kim Hansen

unread,
Oct 21, 2002, 3:28:57 AM10/21/02
to
Lasse Reichstein Nielsen <l...@hotpop.com> writes:

> Kim Schulz <k...@schulz.dk> writes:
>
> > der er ingen tvivl der! det bliver -4
> > Opløftning i potens har højere prioritet end substraktionen og det skal
> > derfor læses som:
> > -(2^2) eller -1*2*2
>
> Unære operationer, inklusive unært minus, binder stærkere end binære
> operationer, så jeg vil læse det som (-2)^2 og ikke -(2^2).

Det er ikke rigtigt i Perl, der binder unært minus stærkere end
f.eks. +, * og /, men svagere end ** (potensopløftning).

$ perl -le'print -2**2'

-4

I C, C++, SML og Java binder det unære minus stærkest, men der er
heller ikke nogen potensopløftnings operator at sammenligne med i
disse sprog.

Jeg har aldrig aldrig set begrebet 'unært minus' blive brugt i
matematik, jeg troede kun det var computere der tolkede unært og
binært minus med forskellig præcedens.

--
Kim Hansen | |\ _,,,---,,_ | Det er ikke
Dalslandsgade 8, A708 | /,`.-'`' -. ;-;;,_ | Jeopardy.
2300 København S | |,4- ) )-,_. ,\ ( `'-' | Svar _efter_
Phone: 32 88 60 86 | '---''(_/--' `-'\_) | spørgsmålet.

Peter Makholm

unread,
Oct 21, 2002, 3:48:11 AM10/21/02
to
Kim Hansen <k-tah...@oek.dk> writes:

> Jeg har aldrig aldrig set begrebet 'unært minus' blive brugt i
> matematik, jeg troede kun det var computere der tolkede unært og
> binært minus med forskellig præcedens.

Jeg tror også kun jeg har set begrebet i sammenhæng med computerer.

I matematiske sammenhæng tror jeg slet ikke at jeg ville opfatte det
som en operator med at der var tale om *tallet* blev skrevet
'-2'. (Forskellen er når det komemr til stykke selvfølgelig ens).

--
Peter Makholm | I congratulate you. Happy goldfish bowl to you, to
pe...@makholm.net | me, to everyone, and may each of you fry in hell
http://hacking.dk | forever
| -- The Dead Past

Kim Hansen

unread,
Oct 21, 2002, 4:02:13 AM10/21/02
to
Peter Makholm <pe...@makholm.net> writes:

> I matematiske sammenhæng tror jeg slet ikke at jeg ville opfatte det
> som en operator med at der var tale om *tallet* blev skrevet
> '-2'. (Forskellen er når det komemr til stykke selvfølgelig ens).

Forskellen er da 8 ?

Klaus Alexander Seistrup

unread,
Oct 21, 2002, 4:56:55 AM10/21/02
to
Kim Hansen skrev:

> Det er ikke rigtigt i Perl, der binder unært minus stærkere end
> f.eks. +, * og /, men svagere end ** (potensopløftning).
>
> $ perl -le'print -2**2'
> -4

Det samme gør python:

>>> -2**2
-4
>>>


// Klaus

--
><> vandag, môre, altyd saam

Lasse Reichstein Nielsen

unread,
Oct 21, 2002, 5:08:45 AM10/21/02
to
Jesper Harder <har...@myrealbox.com> writes:

> Det er en forkert læsning. Du mener vel heller ikke at:
>
> -a² = a²

Nej. Hvis jeg ikke havde været på vej i seng da jeg skrev det, hvade
jeg nok postet en opfølger hvor jeg sagde at det afhang af notation.
Hvis man bruger rigtig superscript for potenserne, så læser jeg dem
som bindende stærkere end unært minus (nok fordi jeg også regner
"superscript-2" som en unær operation). Hvis det skrives med ^ eller
** eller en anden "programmeringssprogsnotation", så er jeg mest
tilbøjelig til at se det som en binær operator, og derfor lade det
binde svagere end unært minus. Det er selvfølgelig inkonsekvent,
kan jeg godt se. Fordømt!

Lasse Reichstein Nielsen

unread,
Oct 21, 2002, 5:10:11 AM10/21/02
to
Peter Makholm <pe...@makholm.net> writes:

> Bertel Lund Hansen <nos...@lundhansen.dk> writes:
>
> > Det er bare ikke et unært minus i udtrykket.
>
> Efter som minuset kun har et argument er det vel per definition unært?

Enten det, eller også skal -2 regnes som /et/ symbol der repræsenterer
tallet "minus to". Så er der faktisk ikke noget minus overhovedet (men
så ville jeg faktisk have ret, så det går nok ikke :)

Lasse Reichstein Nielsen

unread,
Oct 21, 2002, 5:12:28 AM10/21/02
to
Peter Makholm <pe...@makholm.net> writes:

> Jeg tror også kun jeg har set begrebet i sammenhæng med computerer.

> I matematiske sammenhæng tror jeg slet ikke at jeg ville opfatte det
> som en operator med at der var tale om *tallet* blev skrevet
> '-2'. (Forskellen er når det komemr til stykke selvfølgelig ens).

Men hvis man sætter parenteserne så det bliver -(2^2), så er minuset
ikke en del af tallet, og må ses som en unær operator ("numerisk
negation", lige som den unære logiske negation).

Flemming Jensen

unread,
Oct 21, 2002, 7:42:42 AM10/21/02
to
Jesper Harder skrev:

> > der er ingen tvivl der! det bliver -4
>
> Ja, selvfølgelig. Det er basal folkeskolematematik.

(-2)^2 har da altid givet 4 og ikke -4. (-2)*(-2)=4, forstår ikke hvordan I
kan blive enige om -4.

--
Flemming Jensen


Klaus Alexander Seistrup

unread,
Oct 21, 2002, 7:48:08 AM10/21/02
to
Flemming Jensen skrev:

> (-2)^2 har da altid givet 4 og ikke -4. (-2)*(-2)=4, forstår ikke
> hvordan I kan blive enige om -4.

Vel fordi 0 - 2² = -4. Men man kunne også argumentere at -2 er ét
tal som blot repræsenteres af to tegn, og i så fald skal det læses
(-2)² = 4.

Bertel Lund Hansen

unread,
Oct 21, 2002, 8:17:23 AM10/21/02
to
Flemming Jensen skrev:

>(-2)^2 har da altid givet 4

Det stod der jo ikke.

>forstår ikke hvordan I kan blive enige om -4.

Vi læser -(2^2).

Flemming Jensen

unread,
Oct 21, 2002, 8:09:07 AM10/21/02
to
Klaus Alexander Seistrup skrev:

> Vel fordi 0 - 2² = -4. Men man kunne også argumentere at -2 er ét
> tal som blot repræsenteres af to tegn, og i så fald skal det læses
> (-2)² = 4.

Ja, der var jeg for hurtig. Jeg læste det nemlig som (-2)^2, og det står jo
skrevet uden parenteserne. -2^2 giver -4 og (-2)^2 giver 4. Det er jeg helt
enig med. Problemet ligger nok bare i, at folk nogle gange glemmer at sætte
parenteser omkring, selvom de mener det med parenteserne.

--
Flemming Jensen


Kim Schulz

unread,
Oct 21, 2002, 8:18:21 AM10/21/02
to

ja sådan lærer man det i folkeskolen, men så snart man er videre så
begynder man at lære mere om hvordan forskellige funktioner (addition,
substaktion, multiplikation osv) vægtes forskelligt.
Dette er især gældende i forbindelse med computerprogrammer, hvor den
brede enighed ligger på at -2^2=-4 (potens vægtes højere end
substraktion).

--
Kim Schulz - Freelance Development | An Ada exception is when a routine
Email : kim @ schulz.dk | gets in trouble and says 'Beam me
Tlf : 51904262 | up, Scotty'.

Flemming Jensen

unread,
Oct 21, 2002, 8:26:14 AM10/21/02
to
Kim Schulz skrev:

> ja sådan lærer man det i folkeskolen, men så snart man er videre så
> begynder man at lære mere om hvordan forskellige funktioner (addition,
> substaktion, multiplikation osv) vægtes forskelligt.

Hvis du læste mit andet indlæg vil du se, hvorfor jeg skrev hvad jeg gjorde.
Jeg læste den oprindelig tråd forkert. Men tror egentlig også at man lærer
det i folkeskolen. Multiplikation først, lærer man jo også i folkeskolen, så
det er ikke matematik på et højt niveau vi snakker om her. Efter hvad jeg
har forstået i hvert fald.

> Dette er især gældende i forbindelse med computerprogrammer, hvor den
> brede enighed ligger på at -2^2=-4 (potens vægtes højere end
> substraktion).

Som sagt er jeg helt enig, læs mit sidste indlæg. Jeg programmere selv, og
har faktisk stødt på netop denne situattion i et regneprogram jeg kogte
sammen i Pascal for nogle år siden =)

--
Flemming Jensen


Stefan Holm

unread,
Oct 21, 2002, 11:31:40 AM10/21/02
to
Kim Schulz <k...@schulz.dk> writes:

> ja sådan lærer man det i folkeskolen,

Er der virkelig nogen, der lærer at opskrive det uden parenteser, hvis
det menes med?
Dåmme matematiklærere.

--
"Me fail English? That's unpossible!"

Kim Schulz

unread,
Oct 21, 2002, 11:52:01 AM10/21/02
to
On Mon, 21 Oct 2002 17:31:40 +0200
Stefan Holm <nos...@algebra.dk> wrote:
> Kim Schulz <k...@schulz.dk> writes:
>
> > ja sådan lærer man det i folkeskolen,
>
> Er der virkelig nogen, der lærer at opskrive det uden parenteser, hvis
> det menes med?


tjaa for reglen jeg lærte var at

ingen paranteser: -2^2 = -(2^2) =-4
Paranteser ændrer prioritet, og behøves derfor kun hvis der rent faktisk
er noget som skal ændres.

du skriver vel heller ikke
1+(2*2)+(4*3) hver gang i stedet for at skrive 1+2*2+4*3


--
Kim Schulz - Freelance Development | You will be successful in love.
Email : kim @ schulz.dk |
Tlf : 51904262 |

Jesper Harder

unread,
Oct 21, 2002, 11:56:29 AM10/21/02
to
Lasse Reichstein Nielsen <l...@hotpop.com> writes:

> Hvis det skrives med ^ eller ** eller en anden "programmerings-


> sprogsnotation", så er jeg mest tilbøjelig til at se det som en binær
> operator, og derfor lade det binde svagere end unært minus.

Kender du nogen programmeringssprog, som binder - stærkere end **?

I Fortran er operatorbindingerne som i matematik (lige som Perl og
Python):

write(*,*) -2**2
==> -4

Jesper Harder

unread,
Oct 21, 2002, 11:50:09 AM10/21/02
to
Kim Schulz <k...@schulz.dk> writes:

> "Flemming Jensen" <Cybe...@tiscali.dk> wrote:
>> Jesper Harder skrev:
>>
>> > > der er ingen tvivl der! det bliver -4
>> >
>> > Ja, selvfølgelig. Det er basal folkeskolematematik.
>>
>> (-2)^2 har da altid givet 4 og ikke -4. (-2)*(-2)=4, forstår ikke
>> hvordan I kan blive enige om -4.
>
> ja sådan lærer man det i folkeskolen,

Det tror jeg ikke. Da jeg gik i folkeskolen lærte vi da om
andengradsligninger, hvor man er nødt til at vide, at den rigtige
læsning er

-x² = -x·x

og ikke

-x² = (-x)·(-x)

Ellers kan man jo ikke finde ud af at løse andengradsligninger.

Lasse Reichstein Nielsen

unread,
Oct 21, 2002, 12:20:02 PM10/21/02
to
Jesper Harder <har...@myrealbox.com> writes:

> Kender du nogen programmeringssprog, som binder - stærkere end **?

Sjovt nok nej. Hverken C eller SML, som er de sprog jeg kender bedst,
har en potensopløftningsoperator, så jeg er næsten lovligt undskyldt
for at tage fejl :)

Kim Hansen

unread,
Oct 21, 2002, 12:32:07 PM10/21/02
to
Jesper Harder <har...@myrealbox.com> writes:

> Lasse Reichstein Nielsen <l...@hotpop.com> writes:
>
> > Hvis det skrives med ^ eller ** eller en anden "programmerings-
> > sprogsnotation", så er jeg mest tilbøjelig til at se det som en binær
> > operator, og derfor lade det binde svagere end unært minus.
>
> Kender du nogen programmeringssprog, som binder - stærkere end **?

I SML kan man selv lave en **, men den kan ikke laves så den binder
stærkere end det unære minus (hvilket sikkert er en grund til at den
ikke er med som standard).

| Moscow ML version 2.00 (June 2000)
| Enter `quit();' to quit.
| - infix 9 **;
| > infix 9 **
| - fun x ** 1 = x
| | x ** y = x * x ** (y-1);
| > val ** = fn : int * int -> int
| - ~2**2;
| > val it = 4 : int

bc(1) har til gengæld en indbygget potensoperator ^ med lavere
præcedens end unært -, man kan endda slå det efter i man-siden, så det
er per design.

| bc 1.06
| Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
| This is free software with ABSOLUTELY NO WARRANTY.
| For details type `warranty'.
| -2^2
| 4
| 0-2^2
| -4

Jesper Harder

unread,
Oct 21, 2002, 1:21:45 PM10/21/02
to
Kim Hansen <k-tah...@oek.dk> writes:

> Jesper Harder <har...@myrealbox.com> writes:
>
>> Kender du nogen programmeringssprog, som binder - stærkere end **?
>

> bc(1) har til gengæld en indbygget potensoperator ^ med lavere
> præcedens end unært -, man kan endda slå det efter i man-siden, så det
> er per design.

Ugh, minsandten. Det forekommer mig meget uklogt og farligt at lave et
lommeregnersprog, som ikke bruger den samme bindingsprioritet som
matematik.

Hvilke undskyldninger kan man forestille sig de har haft for det
hjernedøde design?

Jens Axel Søgaard

unread,
Oct 21, 2002, 3:45:28 PM10/21/02
to
Henning Præstegaard wrote:
> http://newz.dk/forum_item.php?id=23060

>
> På dette link er der en diskution igang om
> hvad regnestykket -2^2 giver. Jeg har intet
> svar, men kunne forestille mig at der kunne
> være et par stykker her i gruppen der synes
> at problemet er interesant.

Operatorhierarkiet bygger på konventioner.
Det er dog betryggende, at de er valgt med
omtanke. Jeg ville være slemt ked af, at

0-2^2

skiftede værdi, hvis jeg af vanvare kom til
at fjerne nullet

-2^2.

Texas-lommeregnerne TI82 og TI83 finder den rigtige
værdi. Men selv om Texas har lavet lommeregnere
i mange herrens år, har de alligevel lavet fejl.

På TI82 besluttede man, at implicit multiplikation
havde højere rang end almindelig multiplikation og
division. Dermed får man denne udregning:

1/2x = 1/(2x)

På TI83 de fortrudt og givet implicit multiplikation
samme stadig status som vennerne, så der får man

1/2x = (1/2)x

Ak ja.

--
Jens Axel Søgaard

Lasse Reichstein Nielsen

unread,
Oct 21, 2002, 5:28:51 PM10/21/02
to
Jens Axel Søgaard <use...@soegaard.net> writes:

> Jeg ville være slemt ked af, at
>
> 0-2^2
>
> skiftede værdi, hvis jeg af vanvare kom til
> at fjerne nullet
>
> -2^2.

Jeg vil helst ikke tænke på unært minus som værende det samme som
binært minus med et implicit 0 som første argumet. Jeg ved godt at jeg
tog fejl med hensyn til potensopløftning (Buh!), men jeg vil gerne
have at unært minus binder stærkere end multiplikation.

(Faktisk foretrækker jeg at tænke på binært minus som værende
defineret ud fra plus og unært minus: a-b := a+(-b), hvor + er
addition i en gruppe og - er operationen der finder den additive
inverse til et element i gruppen).

Hvordan læses -2*3? Er det (-2)*3 eller -(2*3)? (Jeg ved godt at
resultatet er det samme, men det er bare fordi jeg ikke kan komme på
en operation at bruge, i stedet for multiplikation, der ikke er linær
i sit første argument. Jeg regner det stadigt som væsentligt
forskellige udtryk). Det sidste er det der svarer til 0-2*3.

Jens Axel Søgaard

unread,
Oct 21, 2002, 6:09:44 PM10/21/02
to
Lasse Reichstein Nielsen wrote:
> Jens Axel Søgaard <use...@soegaard.net> writes:

>>Jeg ville være slemt ked af, at
>>
>> 0-2^2
>>
>>skiftede værdi, hvis jeg af vanvare kom til
>>at fjerne nullet
>>
>> -2^2.
>
>
> Jeg vil helst ikke tænke på unært minus som værende det samme som
> binært minus med et implicit 0 som første argumet. Jeg ved godt at jeg
> tog fejl med hensyn til potensopløftning (Buh!), men jeg vil gerne
> have at unært minus binder stærkere end multiplikation.

Problemet er størst i de sammenhænge, hvor fortegnsminus og
subtraktion skrives med samme tegn. I de sammenhænge vil jeg
foretrække, at fortegnsminus fik samme plads om addition og subtraktion.
Så giver reglen multiplikation og division før addition og subtraktion,
nemlig at

-2^2 = -2*2 = -4

Men de sammenhænge, man har mulighed for at have et specielt tegn
for fortegnsminusm har jeg samme syn som dig.


--
Jens Axel Søgaard

Jesper Harder

unread,
Oct 21, 2002, 7:58:38 PM10/21/02
to

Hvad skulle fordelen være ved at have forskellige tegn?

Det giver større kompleksitet og endnu flere mere eller mindre logiske
bindingsregler, som den stakkels programmør skal lære udenad. Derved
vil det næsten med garanti forøge antallet af programfejl.

Henning Makholm

unread,
Oct 22, 2002, 7:39:29 AM10/22/02
to
Scripsit Jesper Harder <har...@myrealbox.com>

> Jens Axel Søgaard <use...@soegaard.net> writes:

> > Men de sammenhænge, man har mulighed for at have et specielt tegn for
> > fortegnsminusm har jeg samme syn som dig.

> Det giver større kompleksitet og endnu flere mere eller mindre logiske


> bindingsregler, som den stakkels programmør skal lære udenad. Derved
> vil det næsten med garanti forøge antallet af programfejl.

I Standard ML har man et specielt tegn (~) for unært minus. Det binder
- lige som alle andre unære funktioner - stærkere end alle
infixoperatorer.

Jeg har programmeret i årevis i SML og aldrig oplevet fejl der
skyldtes det underlige negationstegn - ihvertfald ikke fejl der ikke
med det samme blev markeret som syntaksfejl under oversættelsen.

--
Henning Makholm "Hell, every other article you read
is about the Mars underground, and how
they're communists or nudists or Rosicrucians --"

Jens Axel Søgaard

unread,
Oct 22, 2002, 8:04:31 AM10/22/02
to
Jesper Harder wrote:

> Hvad skulle fordelen være ved at have forskellige tegn?
>
> Det giver større kompleksitet og endnu flere mere eller mindre logiske
> bindingsregler, som den stakkels programmør skal lære udenad. Derved
> vil det næsten med garanti forøge antallet af programfejl.

Kompleksitet for hvem?

Den stakkels lommeregners evalueringsalgoritme bliver betydelig
nemmere at skrive (og hurtigere), hvis den slipper for at skulle afgøre
om et givet minustegn betyder subtraktion eller fortegnsskift.

Jeg forestiller mig, at stakforbruget falder samt at hastigheden
forøges ved at anvende to forskellige tegn.

Endelig er det sundt at minde elever om, at der er tale om
to forskellige begreber.


At Texas tænker pædagogisk kan ses ved at lege med deres
børnelommeregnere. Her er der ofte lagt pauser ind i programmerne,
så den bliver langsommere. Håbet er, at børnene opdager, at det
er nemmere at regne i hovedet.

--
Jens Axel Søgaard

Lasse Reichstein Nielsen

unread,
Oct 22, 2002, 11:02:23 AM10/22/02
to
"Jens Axel Søgaard" <use...@soegaard.net> writes:

> Den stakkels lommeregners evalueringsalgoritme bliver betydelig
> nemmere at skrive (og hurtigere), hvis den slipper for at skulle afgøre
> om et givet minustegn betyder subtraktion eller fortegnsskift.

Evalueringen er nok ligeglad, det er parsingen der er problemet, og
kun hvis man kan skrive generelle udtryk ... altså oftest i rigtige
programmeringssprog (eller en HP48 i equation mode :)). Når først det
er parset, så er forskellen på de to klar.

De fleste lommeregnere har faktisk to knapper: minus (-) og
fortegnsskift (+/-). Hvis du kigger på en "lommeregner" der bruger
omvendt polsk notation (min HP48 er gammel, men stadig i overkanten af
hvad jeg vil kalde "lommeregner"), så er alle knapper kommandoer - et
tryk på minus *udfører* den binære subtraktion, et tryk på
fortegnsskift ændrer fortegnet. Det udtryk der beregnes skal ikke
parses først, det bliver beregnet løbende som det bliver indtastet, og
der er ingen problemer med assiciativiteten. På en almindelig
infix-lommeregner kan man godt trykke "-","2","x^y","2" og få -4, men
der er det fordi der er et "0" på displyet når man starter. Den bruger
nok en stak.

> Jeg forestiller mig, at stakforbruget falder samt at hastigheden
> forøges ved at anvende to forskellige tegn.

Parseren bliver lettere at skrive. Jeg tror dog ikke at det er derfor
SML bruger ~ som unær negation, men snarere fordi den er defineret på
samme måde som andre prefix- og infix-operatorer istedet for at være
"hardcoded". I SML kan man ikke overloade en operator til at være både
unær og binær, så i stedet for at indbygge en grim undtagelse til
reglerne lavede de to syntaktisk forskellige operatorer.

> Endelig er det sundt at minde elever om, at der er tale om
> to forskellige begreber.

Jep. Unært minus er ikke det samme som binært minus med et implicit
nul foran :)

Henning Makholm

unread,
Oct 22, 2002, 11:30:10 AM10/22/02
to
Scripsit Lasse Reichstein Nielsen <l...@hotpop.com>

> Jep. Unært minus er ikke det samme som binært minus med et implicit
> nul foran :)

Netop. Det er omvendt: Binært minus er det samme som unært minus med
et implicit (binært) plus foran.

--
Henning Makholm "*Tak* for de ord. *Nu* vinker nobelprisen forude."

Jeppe Stig Nielsen

unread,
Oct 22, 2002, 1:29:06 PM10/22/02
to
"Jens Axel Søgaard" wrote:
>
> At Texas tænker pædagogisk kan ses ved at lege med deres
> børnelommeregnere. Her er der ofte lagt pauser ind i programmerne,
> så den bliver langsommere. Håbet er, at børnene opdager, at det
> er nemmere at regne i hovedet.

Sic! Faktisk er alting nemmest i hovedet hvis man bare lægger til-
strækkeligt lange pauser ind i al software.

--
Jeppe Stig Nielsen <URL:http://jeppesn.dk/>. «

"Je n'ai pas eu besoin de cette hypothèse (I had no need of that
hypothesis)" --- Laplace (1749-1827)

Jeppe Stig Nielsen

unread,
Oct 22, 2002, 1:22:09 PM10/22/02
to
Kim Hansen wrote:
>
> bc(1) har til gengæld en indbygget potensoperator ^ med lavere
> præcedens end unært -, man kan endda slå det efter i man-siden, så det
> er per design.

Ubehageligt!

Jeppe Stig Nielsen

unread,
Oct 22, 2002, 1:31:08 PM10/22/02
to
Jens Axel Søgaard wrote:
>
> På TI82 besluttede man, at implicit multiplikation
> havde højere rang end almindelig multiplikation og
> division. Dermed får man denne udregning:
>
> 1/2x = 1/(2x)
>
> På TI83 de fortrudt og givet implicit multiplikation
> samme stadig status som vennerne, så der får man
>
> 1/2x = (1/2)x
>
> Ak ja.

Interessant. Jeg kan umiddelbart bedst lide TI83-konventionen. Jeg ville
forvente at en udeladt asterisk gav samme svar som man fik med eksplicit
multiplikationstegn.

Jeppe Stig Nielsen

unread,
Oct 22, 2002, 1:38:52 PM10/22/02
to
Lasse Reichstein Nielsen wrote:
>
> Hvordan læses -2*3? Er det (-2)*3 eller -(2*3)? (Jeg ved godt at
> resultatet er det samme, men det er bare fordi jeg ikke kan komme på
> en operation at bruge, i stedet for multiplikation, der ikke er linær
> i sit første argument. Jeg regner det stadigt som væsentligt
> forskellige udtryk). Det sidste er det der svarer til 0-2*3.

Prøv med »+«: Hvordan læses -2+3? Er det (-2)+3 eller -(2+3)?

Man kan kun sige at det er en konvention hvilke unære operationer der
kommer før hvilke binære.

Der er en principiel foskel på negation og subtraktion. Men jeg tror
du har ret i at når et udtryk indledes med et negationsminus, så kan
man altid udskifte dette med et »0-« (nul efterfulgt af subtraktions-
minus). Og det er nyttigt nok eftersom vi ofte bruge samme symbol for
de to slags minusser.

Jeppe Stig Nielsen

unread,
Oct 22, 2002, 1:52:45 PM10/22/02
to
"Henning Præstegaard" wrote:
>
> http://newz.dk/forum_item.php?id=23060
>
> På dette link er der en diskution igang om
> hvad regnestykket -2^2 giver. Jeg har intet
> svar, men kunne forestille mig at der kunne
> være et par stykker her i gruppen der synes
> at problemet er interesant.

Dette udtryk kunne enten betyde -(2^2) eller (-2)^2. Man har så be-
sluttet sig for at det skal betyde det første. Det er nemlig det mest
hensigtsmæssige (jf. resten af tråden).

Men det er på ingen måde »indlysende« at det er sådan det skal forstås.
Det er blot en konvention som man må lære at kende. Jeg kan afsløre at
det er et ganske udbredt problem blandt nye gymnasieelever.

Eksempel: I en andengradsligning

3x²-9x-5=0

ser man somme tider gymnasieelever udregne diskriminanten som

-9²-4·3·-5 = -21

ved brug af regnemaskine. Det er forkert. Det korrekte er:

(-9)²-4·3·(-5) = 9²+4·3·5 = 141

Konventionen er at der altid sættes parentes rundt om en faktor der
indeholder et negationstegn.

Lasse Reichstein Nielsen

unread,
Oct 22, 2002, 6:23:26 PM10/22/02
to
Jeppe Stig Nielsen <ma...@jeppesn.dk> writes:

> Prøv med »+«: Hvordan læses -2+3? Er det (-2)+3 eller -(2+3)?

Jeg læser negation som bindende stærkere end addition (og stærkere end
multipliation) ... men jeg ville jo også have det til at binde
stærkere end potensopløftning :)



> Man kan kun sige at det er en konvention hvilke unære operationer der
> kommer før hvilke binære.

Afgjort. Jeg foretrækker dog at præcedensen er en ordningsrelation
uden cykler, så jeg håber konventionerne opfylder det :)

> Der er en principiel foskel på negation og subtraktion.

HELT enig!

> Men jeg tror du har ret i at når et udtryk indledes med et
> negationsminus, så kan man altid udskifte dette med et »0-« (nul
> efterfulgt af subtraktions- minus).

Det vil jeg helst undgå at sige, specielt når "udtryk" ikke er klart
defieret.
F.eks. er -4 et udtryk, men man kan ikke skifte -4 ud med 0-4 når det
optræder som del af et andet udtryk, f.eks. 3*-4.

Mere præcist vil det være at udskifte et udtryk, x, der starter med
unært minus med (0-x) ... altså med parenteser. Men det er jo bare
fordi binært minus er defineret ud fra negation og addition og nul er
neutralt element for addition :)

Det hele ville være meget nemmere hvis vi arbejde med syntaxtræer
istedet for flade strenge ... da være ingen parentes nødig!

Jesper Harder

unread,
Oct 22, 2002, 9:54:02 PM10/22/02
to
"Jens Axel Søgaard" <use...@soegaard.net> writes:

> Jesper Harder wrote:
>
>> Hvad skulle fordelen være ved at have forskellige tegn?
>>
>> Det giver større kompleksitet og endnu flere mere eller mindre
>> logiske bindingsregler, som den stakkels programmør skal lære udenad.
>> Derved vil det næsten med garanti forøge antallet af programfejl.
>
> Kompleksitet for hvem?

For brugeren af sproget.

Jeg har set empiriske undersøgelser, hvor man har talt op hvilke
fejltyper, der forekommer hyppigt. Misforståelse af operatorbindinger
var en meget hyppig årsag til programmeringsfejl (men det er
selvfølgelig kun relevant for sprog med infix-notation).

> Den stakkels lommeregners evalueringsalgoritme bliver betydelig
> nemmere at skrive (og hurtigere), hvis den slipper for at skulle
> afgøre om et givet minustegn betyder subtraktion eller fortegnsskift.

En lommeregner eller en oversætter skal laves én gang, men bruges mange
gange. Det er vigtigere at formindske fejlkilder for de mange brugere,
end at gøre livet en smule lettere for de få udviklere.

> Jeg forestiller mig, at stakforbruget falder samt at hastigheden
> forøges ved at anvende to forskellige tegn.

Korrekte programmer/udregninger er næsten altid vigtigere end en lille
hastighedsfordel.

Kim Hansen

unread,
Oct 23, 2002, 3:26:21 AM10/23/02
to
Jesper Harder <har...@myrealbox.com> writes:

> Hvad skulle fordelen være ved at have forskellige tegn?
>
> Det giver større kompleksitet og endnu flere mere eller mindre logiske
> bindingsregler, som den stakkels programmør skal lære udenad. Derved
> vil det næsten med garanti forøge antallet af programfejl.

Denne opgave illustrerer at mange tillægger unært minus en meget høj
præcedens og det binære en lav, dvs. at de ummidelbart mener at -2^2=4
og 0-2^2=-4. Hvis man indførte disse regler i et sprog så er jeg
overbevist om at man ville få fejlfyldte programmer.

Løsningen med to tegn som f.eks. i SML er da mere enkel og har mere
simple bindingsregler en C, Perl og bcs løsninger hvor tegnet '-' har
forskellig præcedens alt efter hvor i ligningen det sættes.

Jeppe Stig Nielsen

unread,
Oct 23, 2002, 5:04:21 PM10/23/02
to
Lasse Reichstein Nielsen wrote:
>
> F.eks. er -4 et udtryk, men man kan ikke skifte -4 ud med 0-4 når det
> optræder som del af et andet udtryk, f.eks. 3*-4.

Sjovt nok tillader man (jeg) ikke at skrive 3·-4. Det forlanges at man
skriver 3·(-4), og i det tilfælde er det jo o.k. at ændre til 3·(0-4).

Jens Axel Søgaard

unread,
Oct 23, 2002, 7:03:23 PM10/23/02
to
Jeppe Stig Nielsen wrote:
> Lasse Reichstein Nielsen wrote:
>>
>> F.eks. er -4 et udtryk, men man kan ikke skifte -4 ud med 0-4 når det
>> optræder som del af et andet udtryk, f.eks. 3*-4.
>
> Sjovt nok tillader man (jeg) ikke at skrive 3·-4. Det forlanges at man
> skriver 3·(-4), og i det tilfælde er det jo o.k. at ændre til 3·(0-4).

Det prædiker jeg også - stolpe op og stolpe ned. Årsagen er (udover tradition),
er at langt størstedelen overser prikken i 3·-4, når de skal regne videre,
og læser det som 3-4. Forlanger man, at der altid sætter parentes,
laves der færre regnefejl.

--
Jens Axel Søgaard

Jens Axel Søgaard

unread,
Oct 23, 2002, 7:06:52 PM10/23/02
to
Jeppe Stig Nielsen wrote:
> "Jens Axel Søgaard" wrote:
>>
>> At Texas tænker pædagogisk kan ses ved at lege med deres
>> børnelommeregnere. Her er der ofte lagt pauser ind i programmerne,
>> så den bliver langsommere. Håbet er, at børnene opdager, at det
>> er nemmere at regne i hovedet.
>
> Sic!

Plejer sic! ikke at gå på selve citatet og ikke indholdet i det citerede?

> Faktisk er alting nemmest i hovedet hvis man bare lægger til-
> strækkeligt lange pauser ind i al software.

Sålænge de holder sig til børnelommeregnerne, så er det fint med
mig.

--
Jens Axel Søgaard

Jens Axel Søgaard

unread,
Oct 23, 2002, 7:17:03 PM10/23/02
to
Jesper Harder wrote:
> "Jens Axel Søgaard" <use...@soegaard.net> writes:
>
>> Jesper Harder wrote:
>>
>>> Hvad skulle fordelen være ved at have forskellige tegn?
>>>
>>> Det giver større kompleksitet og endnu flere mere eller mindre
>>> logiske bindingsregler, som den stakkels programmør skal lære
>>> udenad. Derved vil det næsten med garanti forøge antallet af
>>> programfejl.
>>
>> Kompleksitet for hvem?
>
> For brugeren af sproget.

Jeg er helt ikke overbevist om, at det er sværer for brugeren.
To foreskellige tegn til forskellige begreber gør det nemmere
at gennemskue, hvad det drejer sig om.

Sammenlign eventuelt med nogle matematiklæreres x:=3 , når x
sættes lig 3. Dermed kan man se, at der ikke er tale om en ligning,
men bare en navngivning.

> Jeg har set empiriske undersøgelser, hvor man har talt op hvilke
> fejltyper, der forekommer hyppigt. Misforståelse af operatorbindinger
> var en meget hyppig årsag til programmeringsfejl (men det er
> selvfølgelig kun relevant for sprog med infix-notation).

Du tænker på for eksempel C? Jeg sætter altid defensive parenteser;
jeg kan sandt for dyden ikke huske om rækkefølgen på &,&&,|,||,! og !!.

>> Den stakkels lommeregners evalueringsalgoritme bliver betydelig
>> nemmere at skrive (og hurtigere), hvis den slipper for at skulle
>> afgøre om et givet minustegn betyder subtraktion eller fortegnsskift.
>
> En lommeregner eller en oversætter skal laves én gang, men bruges
> mange gange. Det er vigtigere at formindske fejlkilder for de mange
> brugere, end at gøre livet en smule lettere for de få udviklere.

Det er sandt.

>> Jeg forestiller mig, at stakforbruget falder samt at hastigheden
>> forøges ved at anvende to forskellige tegn.
>
> Korrekte programmer/udregninger er næsten altid vigtigere end en lille
> hastighedsfordel.

Begge dele er korrekte.

Apropos, så havde jeg en engang en lommeregner med en bug.
Det var noget så simpelt som signum:

signum(x)=1, når x>0
signum(0)=0
signum(x)=-1, når x<0

Lommeregneren mente dog af uransagelig grunde, at signum(0) var 1.
Såvidt jeg husker var det en TI60.

--
Jens Axel Søgaard

Jesper Harder

unread,
Oct 23, 2002, 8:49:22 PM10/23/02
to
Kim Hansen <k-tah...@oek.dk> writes:

> Jesper Harder <har...@myrealbox.com> writes:
>
>> Hvad skulle fordelen være ved at have forskellige tegn?
>>
>> Det giver større kompleksitet og endnu flere mere eller mindre logiske
>> bindingsregler, som den stakkels programmør skal lære udenad. Derved
>> vil det næsten med garanti forøge antallet af programfejl.
>
> Denne opgave illustrerer at mange tillægger unært minus en meget høj
> præcedens og det binære en lav, dvs. at de ummidelbart mener at -2^2=4
> og 0-2^2=-4.

Det er jo kun fordi de (midlertidigt) har glemt deres børnelærdom.

> Hvis man indførte disse regler i et sprog så er jeg overbevist om at
> man ville få fejlfyldte programmer.

Nej, selvfølgelig skal man ikke indføre dem. Jeg er også overbevist om
at det ville være en skrækkelig idé at indføre bindingsregler, som
adskiller sig fra basal matematik.

Der er ingen grund til at tildele unært og binært minus forskellig
bindingsprioritet. Hvis de har samme binding (lige som i matematik)
virker det fint.

> Løsningen med to tegn som f.eks. i SML er da mere enkel

Det er da ikke mere enkelt at have *to* tegn, når man kan nøjes med ét.

> og har mere simple bindingsregler en C, Perl og bcs løsninger hvor
> tegnet '-' har forskellig præcedens alt efter hvor i ligningen det
> sættes.

Ja, bc's løsning er dårlig. Jeg ved ikke med C og Perl, men i Fortran
har '-' altid den samme præcedens uanset om det binært eller unært.
Hvorfor skulle man give minus forskellig præcedens, når den ikke har det
i matematik?

Men hvis man vil have simple bindingsregler, er prefix-notation klart
vinderen:

(- (expt 2 2)) ==> -4
(expt -2 2) ==> 4

Brian Elmegaard

unread,
Oct 24, 2002, 6:13:40 AM10/24/02
to
Jesper Harder <har...@myrealbox.com> writes:

> Kender du nogen programmeringssprog, som binder - stærkere end **?

Jeg fandt lige et:
$ c:\texmf\miktex\bin\mpost "\show -2**2; end;"
>> 4
Transcript written on mpout.log.

Jeg ved ikke hvordan mpost i tetex har det? Men jeg har ved at Hobby
gør en del ud af operatorer i mp-manualen.

Et andet eksempel (inde fra emacs):
M-x calculator -2^2 giver 4

--
Brian (remove the sport for mail)
http://www.et.dtu.dk/staff/be

Henning Makholm

unread,
Oct 24, 2002, 10:00:13 AM10/24/02
to
Scripsit Brian Elmegaard <br...@rk-speed-rugby.dk>
> Jesper Harder <har...@myrealbox.com> writes:

> > Kender du nogen programmeringssprog, som binder - stærkere end **?

> Jeg fandt lige et:
> $ c:\texmf\miktex\bin\mpost "\show -2**2; end;"
> >> 4
> Transcript written on mpout.log.

> Jeg ved ikke hvordan mpost i tetex har det?

Ens:

pc-043:~$ mf
This is METAFONT, Version 2.7182 (Web2C 7.3.1)
**\show -2**2; end;
>> 4
Transcript written on mfput.log.

Det er defineret på den måde fra Knuths side. Et løst fortegn er en
<scalar multiplication operator>, og sådan en binder stærkere end alle
binære operatorer; se side 211 i METAFONTbogen.

Men Metafont har i øvrigt lidt "sære" præcedensregler, som ifølge
Knuth er indrettet til at "gøre det rigtige" når man tager et
håndskrevet matematisk udtryk og taster det ind som ascii på den mest
oplagte måde:

pc-043:~$ mf
This is METAFONT, Version 2.7182 (Web2C 7.3.1)
**\ x = 5 ;

*show 5/2x ;
>> 12.5
*show x/2x ;
>> 0.5
*show x/2*x ;
>> 12.5
*end ;
Transcript written on mfput.log.
pc-043:~$

I første eksempel bliver 5/2 opfattet som en brøkkonstant; sådan en
brøkstreg er en del af konstantsytaksen og ikke en binær
operator. Derfor binder den tættere end usynlig multiplikation.
De to sidste eksempler viser at usynlig multiplikation binder tættere
end division; division og synlig multiplikation binder ens og fra
venstre.

--
Henning Makholm "Manden med det store pindsvin er
kommet vel ombord i den grønne dobbeltdækker."

Jens Axel Søgaard

unread,
Oct 24, 2002, 9:45:03 AM10/24/02
to
Jesper Harder wrote:

> Men hvis man vil have simple bindingsregler, er prefix-notation klart
> vinderen:
>
> (- (expt 2 2)) ==> -4
> (expt -2 2) ==> 4

Enig. Men jeg har personligt et problem. Jeg elsker den simple syntaks.
Alle funktioner kaldes på samme måde. Det giver store fordele: ingen
problemer med hiearkier og mulighed for makroer uden "grimme"
undetaglese. Men som matematiker, savner jeg /alligevel/ den gamle
algebraiske syntaks.

( -b+sqrt(b^2 - 4*a*c) ) / (2*a)

(/ (+ (- b) (sqrt (- (square b) (* 4 a c))))
(*2 A))

Ak - hvem der kunne blæse med mel i munden[1].

--
Jens Axel Søgaard

[1] Det er der selvfølgelig også nogle, der gør:

(infix->prefix (- b + sqrt (b ^ 2 - 4 a c)) / ( 4 * a * c))

Men jeg ved ikke rigtig.

SoftMan Brian

unread,
Oct 24, 2002, 5:11:24 PM10/24/02
to

"Kim Hansen" <k-tah...@oek.dk> wrote in message
news:x62u1jf...@tyr.diku.dk...
> I SML kan man selv lave en **, men den kan ikke laves så den binder
> stærkere end det unære minus (hvilket sikkert er en grund til at den
> ikke er med som standard).

hvad med:

fun x ** 1 = x
| x ** y = if (x<0) then x * -x ** (y-1) else x * x ** (y-1);

Har ikke nogen ml at teste med, og er efterhånden meget rusten i ml, så
måske skal -x erstattes med (0-x)


Henning Makholm

unread,
Oct 24, 2002, 6:00:49 PM10/24/02
to
Scripsit "SoftMan Brian" <Brian...@hotmail.com>

> "Kim Hansen" <k-tah...@oek.dk> wrote in message

> > I SML kan man selv lave en **, men den kan ikke laves så den binder


> > stærkere end det unære minus (hvilket sikkert er en grund til at den
> > ikke er med som standard).

> hvad med:

> fun x ** 1 = x

Du har misforstået problmenet. Pointen er at man ikke kan erklære
/navnet/ "**" sådan at udtrykket

~ x ** 2

bliver parset som

~ (x ** 2)

i stedet for

(~ x) ** 2

Dette er uafhængigt af hvad ** /gør/ når den bliver anvendt.

--
Henning Makholm "You are in a little twisting
maze of passages, all different"

Simon Kamber >>mail.com>

unread,
Oct 26, 2002, 7:45:55 PM10/26/02
to
On Mon, 21 Oct 2002 14:26:14 +0200, "Flemming Jensen"
<Cybe...@tiscali.dk> wrote:

>Jeg læste den oprindelig tråd forkert. Men tror egentlig også at man lærer
>det i folkeskolen. Multiplikation først, lærer man jo også i folkeskolen, så
>det er ikke matematik på et højt niveau vi snakker om her. Efter hvad jeg
Tjah, er lige kommet ud af folkeskolen så jeg kan sige med ret stor
sikkerhed at der fik vi at vide at -2^2 var 4. Men jeg kan da godt se
at det ikke er logisk.

0 new messages