Denna delen av 99 uppdateras inte längre utan har arkiverats inför framtiden som ett museum.
Här kan du läsa mer om varför.
Mac-nyheter hittar du på Macradion.com och forumet hittar du via Applebubblan.

kalkylatorn räknar fel i Jaguar

Tråden skapades och har fått 67 svar. Det senaste inlägget skrevs .
Citat:

quote:Skapades ursprungligen av: HankPank:
All applications that support floating point arithmetic will exhibit this problem to some degree.

Vad menas med detta? Att det minimala felet är acceptabelt?

/M

Citat:

quote:Skapades ursprungligen av: - Martin -:

Citat:

quote:Skapades ursprungligen av: HankPank:
All applications that support floating point arithmetic will exhibit this problem to some degree.

Vad menas med detta? Att det minimala felet är acceptabelt?

/M

Nej, naturligtvis inte. Men jag tror att det handlar om att "fuska snyggt" à la Excel. Vad jag vet finns felet inbyggt i alla datorer sen 40-talet och går inte att göra nåt åt (sa han och darrade på rösten, ganska osäker egentligen ).

edit: Följ länken i mitt förra inlägg, där finns mer att läsa.

[ 19 September 2002, 21:51: Meddelandet ändrat av: HankPank ]

Det korta svaret är följande: För att representera t ex talet 1/3 i din dators minne så räcker inte ens alla bitar i datorvärldens samlade RAM-minne och hårddiskar. En tredjedel är lika med 0.333 etc i en *oändlig* räcka treor. Så fort vi anpassar flyttal till en binär representation med ett visst antal decimaler (som man vill för vi har inte oändligt med minne i våra maskiner) så får vi mer eller mindre jobbiga avrundningsfel.

Men Apple borde ju ha programmerat kalkylatorn att visa "0" när ett tal är väldigt nära noll.

Min grafritande räknare känns intelligentare, istället för att visa 0,333333 så får jag svaret 1/3, vilket ju är den exakta värdet.

/M

Citat:

quote:Skapades ursprungligen av: - Martin -:
Men Apple borde ju ha programmerat kalkylatorn att visa "0" när ett tal är väldigt nära noll.

Min grafritande räknare känns intelligentare, istället för att visa 0,333333 så får jag svaret 1/3, vilket ju är den exakta värdet.

/M

Dom flesta tillämpningar implementerar någon IEEE-standard för binär representation av flyttal. T ex IEEE 754 (som i alla fall gamla Excel byggde på). Den standarden (och jag gissar dom flesta andra) föreskriver hur många decimaler som skall räknas som signifikanta och trunkerar eller avrundar resterande decimaler slaviskt och rättvist, dvs på samma sätt. Oavsett om talet skulle ligga nära noll eller min skostorlek. Som tröst skall vi tänka på att dom pojkar och flickor som behöver räkna ut saker och ting mycket exakt inte litar på excel eller Apples Kalkylator

Brasklapp. Jag har ingen aning om Apples kalkylator innehåller massa buggar, eller har implementerat någon IEEE-standard på rätt sätt. Men, jag vet att alla binärrepresentationer av flyttal ger konstiga fel som för oss lekmän ter sig ganska enkla att åtgärda, men så enkelt är det alltså inte.

  • Oregistrerad
  • 2002-09-20 07:24

Jag fick ett sånt här svar i Apples egna forum om det ger något svar..

"That´s not an error. It´s just that the calculator uses binary floating point numbers with a single bit guard digit. In base 2, one tenth is a periodic fraction (like one third in decimal : 0.333333333....)..."

  • Medlem
  • 2002-09-20 08:00

Det låter som en dåres försvarstal. När resten av världen kalkylatorer inte fungerar på det viset, borde väl inte Apples göra det heller. Apple fördummar ju gärna hällre än att vara för komplicerade, så om det här är något annat än en fet bugg...

Sen har vi ju den svenska versionens problem i översättningsdelen. Det blir svårt att förvandla till en feature.

  • Medlem
  • Stockholm
  • 2002-09-20 09:02

-2,775558e-17 - väldigt nära noll iallafall!

Problemet är inte unikt för Apple. Jag vill påstå att all digital representation av flyttal lider av mer eller mindre allvarliga avrundningfel. Mitt digipass från SEB tycker t ex att 1/3*3=0.999999999.

Kanske räknar just din miniräknare rätt i ovanstående fall. Jag är dock ganska säker på att den räknar fel i andra fall.

En kul sak att tänka på angående flyttal är att det finns ganska många.... Bara mellan talet 0.99999999 och 1.0 finns det tal som representerar hela min DVD-samling. Med varje bit exakt rätt. Det finns tal som innesluter hela världens samlade digitala arkiv. Jag kanske är lite knäpp i huvudet, men jag tycker sånt är häffans att tänka på ibland.

Det är tämligen väl utrett varför det blir fel (och att felen är ganska små men kosmetiskt störande).

Testa gärna att räkna lite i Excel också. Glöm inte att slå på 20 decimalers precision bara. Testa lite med kalkylatorn i MacOS 9, felet finns där också.

Framför allt — kom ihåg att felen är små. De är i storleksordning som att mäta avståndet från Smygehuk till Treriksröset i nanometer och beklaga sig över att det blir en halv eller kvarts nanometer fel ibland ;-).

//Mikael

  • Oregistrerad
  • 2002-09-20 15:13

HA!, på skoj testade jag 1-0,9-0,1= på Kalkylatorn i OS 9.2 resultat: 2,032879E-20

Gamla buggar hörni...

  • Medlem
  • 2002-09-20 23:22
Citat:

quote:Skapades ursprungligen av: - Martin -:
Vart skickar man felrapporter?
Någon som har någon specifik mailadress, websida eller liknande?

/M

Jag har skickat en buggrapport

  • Medlem
  • 2002-09-20 23:34
Citat:

quote:Skapades ursprungligen av: KRAFTWERK:
HA!, på skoj testade jag 1-0,9-0,1= på Kalkylatorn i OS 9.2 resultat: 2,032879E-20

Gamla buggar hörni...

hmm, den nya kalkylatorn säger:"-2,775558e-17"

kan någon testa köra samma grej på 604,e.. den proppen har ju dubbel precision i flytalsdelen.. och borde alltså avrunda mycket snyggare....

[ 20 September 2002, 23:35: Meddelandet ändrat av: nixon ]

Citat:

quote:Skapades ursprungligen av: Saffran:
Testade kalkylatorn och dess "Räkna om" funktion med att omvandla Celcius till Fahrenheit.
0°C blir 32°F, vilket är korrekt
100°C blir 132°F, vilket är fel, skall vara 212°F.

Slarvigt Apple, man måste kunna lita på sina verktyg innan man vågar omvandla tex "BTUS till Kalorier".

Slarvigt Apple, Schweizerfranc saknas, valutorna står ej i bokstavsordning, det numeriska tangentbordet fungerar ej om remsan är utdragen och provlyssna gärna på resultatet av 1 delat med 3.

Snälla Apple, varför inte göra rätt med en gång? Kanske dags för att kvalitetssäkra verksamheten?

Har testat efter 10.2.1 uppdateringen allt fungerar prima med konverteringen, bättre sent än aldrig antar jag.

Mitt numeriska tangentbord fungerar nu i 10.2.1 men annars är det lika dåligt som tidigare. Prova gärna 1 - 0,9 med "Remsa" och "Avancerad".

Citat:

quote:Skapades ursprungligen av: Saffran:
Mitt numeriska tangentbord fungerar nu i 10.2.1 men annars är det lika dåligt som tidigare. Prova gärna 1 - 0,9 med "Remsa" och "Avancerad".

Ja, kalkylatorn räknar fel med 0.000000000000000002.

Som sagt, flyttal är olika lätta att representera i olika talsystem. Vi räknar vardagligt med bas 10. Datorer räknar i vanliga fall med bas 2. 1/3 är ett tal som är svårt att representera i bas 10. 1/10 är enkelt i bas 10, men svårt i bas 2. Det som ser ut som ett enkelt tal för oss (1 - 0,9) är inte så enkelt att räkna exakt rätt om man mellanlagrar resultat med en talbas av 2 och använder begränsad mängd decimaler.

Så, prova själv att räkna själv med låt säga 6 decimalers signifikans följande. 1/3*3

1/3=0.333333

0.333333 * 3 = 0.999999

Så, anledningen att vissa räknefel för lekmän ser extra korkade ut är att dom inkluderar flyttal som i bas 10 är enkla att representera med få decimaler, men i bas 2 är svåra. Andra flyttal kan vara svåra att representera i bas 10, men enkla i bas 2.

Smarta program/miniräknare kan räkna symboliskt och kringgå avrundningsfel som 1/3*3 genom att förenkla uppgiften till 1/1=1.

Sensmoral. Beräkna inte din nästa månfärd med en kalkylator.

ace4711

Du är inne på att förklara varför räknaren räknar fel men dåliga algoritmer är ingen ursäkt för användaren. 1 - 0,9 är faktiskt lika med 0,1 och inget annat.
Dina exempel är missvisande eftersom du i ditt första exempel visar avrundningsfelet som beror på det antal decimaler som datorn använder.
Ditt andra exempel 1/3 * 3 är exakt lika med 1 annars har du matat in siffrorna i fel ordning så att avrundningsfelet har förstorats dvs den mänskliga faktorn!
Går det att använda denna kalkylator seriöst? Ja, för en tekniker kan det gå bra men för en ekonom som skall få debet och kredit att ge samma resultat kan det bli problem.

Citat:

quote:Skapades ursprungligen av: ace4711:
Problemet är inte unikt för Apple.

Kalkylatorn i Windows räknar i alla fall rätt.

1 / 3 = 0,33333333333333333333333333333333

Och det multiplicerat med 3 blir 1.

Och 1 - 0,9 - 0,1 = 0

[quote]quote:Skapades ursprungligen av: Tage-me-T:
[QUOTE]Skapades ursprungligen av: ace4711:
[qb]Problemet är inte unikt för Apple.
[/quote]Kalkylatorn i Windows räknar i alla fall rätt.

Svante?

Min flickvän är inte hemma just nu, så jag kan inte logga in på hennes PC för att kolla hur Windows-kalkylatorn gör i andra fall. Men, jag kan pula lite med Excel (också MS) på min Mac för att kolla lite. Excel tycker att 1/3*3 faktiskt är lika med 1. Vilket är helt korrekt! Så, är den totala segern helt given...? Nja, inte så snabbt va. Mitt Excel tycker att 0,33333333 * 3 = 1. Små avrundningsfel som dyker upp här och där.

Citat:

quote:Skapades ursprungligen av: Saffran:
ace4711

Du är inne på att förklara varför räknaren räknar fel men dåliga algoritmer är ingen ursäkt för användaren. 1 - 0,9 är faktiskt lika med 0,1 och inget annat.
Dina exempel är missvisande eftersom du i ditt första exempel visar avrundningsfelet som beror på det antal decimaler som datorn använder.
Ditt andra exempel 1/3 * 3 är exakt lika med 1 annars har du matat in siffrorna i fel ordning så att avrundningsfelet har förstorats dvs den mänskliga faktorn!
Går det att använda denna kalkylator seriöst? Ja, för en tekniker kan det gå bra men för en ekonom som skall få debet och kredit att ge samma resultat kan det bli problem.

Jag vet att 1/3*3=1. Jag hoppas att jag inte har påstått något annat? Jag försökte med mitt avrundningsexempel åskådliggöra *hur* och *varför* det blir fel på dom flesta miniräknarna. Dom räknare som inte inte räknar symboliskt utan mellanlagrar delresultat (med ändligt antal decimaler) kommer att räkna fel på 1/3*3, precis som mitt exempel tvingade dig att räkna "fel" men enligt min specifikationen.

Jag tror att dom IEEE-standarder som existerar i detalj reglerar hur man representrerar flyttal i binär form. Hur många decimaler man använder osv.
I varje sådan konvertering av flyttal med oändligt antal decimaler till en representation med ändligt antal decimaler kommer det att bli fel. Dom programmerarna som implementerar en kalkylator gör det förhoppningsvis i enlighet med någon känd IEEE-standard så kan dom personer som vill få mycket exakta svar välja kalylator och beräkningsmetod som passar uppgiften.

Sammanfattningsvis; det är mycket möjligt att programmerarna till Apples Kalkylator har implementerat funktionalitetn helt korrekt enligt specifikationen. Men, specifikationen är sannolikt en sådan som erkänner avrundningsfel. Det motsäger inte inte det faktum att 1/3*3=1. Det kan ingen säga emot. Om du, jag eller någon annan kan visa hur man skall räkna med flyttal i datorer med färre avrundningsfel än dagens olika standarder så antar jag att mänskligheten tacksamt tar emot våra förslag. Om jag har förstått saker och ting korrekt finns det två enkla sätt att räkna mera noggrannt än dom flesta kalkylatorerna. 1) räkna symboliskt så långt som möjligt. 2) Använd flera decimalers noggrannhet. För min egen del kan jag säga att jag aldrig i privatlivet eller yrkeslivet har upplevt att den "begränsade" nogrannhet som finns i t ex Apples Kalkylator har ställt till några problem. Det finns personer och domäner som som behöver mycket bättre noggrannhet än jag, och dom använder (förhoppningsvis) andra verktyg än Apple Kalkylator.

Tillbaka till kvällen tredje Rom & Cola.

  • Medlem
  • 2002-09-21 23:54
Citat:

quote:Skapades ursprungligen av: Tage-me-T:

Citat:

quote:Skapades ursprungligen av: ace4711:
Problemet är inte unikt för Apple.

Kalkylatorn i Windows räknar i alla fall rätt.

1 / 3 = 0,33333333333333333333333333333333

Och det multiplicerat med 3 blir 1.

Och 1 - 0,9 - 0,1 = 0

Tage-me-T är Svante Wendel 47 år gammal från malmö alias S_w som är avstängd här och blev avstängd från macnytt 47 ggr

Det äro själva fan att vi inte vi kan kritisera apple och mac utan att du ska skall komma och skrika om Windoze förtäffligheter.....

ace4711,
Du är inne på att förklara varför räknaren räknar fel men dåliga algoritmer är ingen ursäkt för användaren. 1 - 0,9 är faktiskt lika med 0,1 och inget annat.
Varför envisas du och Apple med att använda flyttalsberäkningar för en sådan här trivial uppgift?

[quote]quote:Skapades ursprungligen av: nixon:
[QUOTE]
Det äro själva fan att vi inte vi kan kritisera apple och mac utan att du ska skall komma och skrika om Windoze förtäffligheter.....
[/quote]Intels första Pentiumprocessorer hade ett inbyggt fel i flyttalsberäkningsdelen. Detta höll på att sänka företaget som först förnekade felet men sedan bytte ut processorer kostnadsfritt till de som klagade. Krav på skadestånd restes från bl a NASA? som av okänd anledning (Pentiumfel) förlorat några satelliter.

Här är du välkommen med synpunkter S&W.

Citat:

quote:Skapades ursprungligen av: Saffran:
ace4711,
Du är inne på att förklara varför räknaren räknar fel men dåliga algoritmer är ingen ursäkt för användaren. 1 - 0,9 är faktiskt lika med 0,1 och inget annat.
Varför envisas du och Apple med att använda flyttalsberäkningar för en sådan här trivial uppgift?

Jag förstår inte. Säger du att 0,9 och 0,1 inte är flyttal?

Törs man komma med en sammanfattning?

Apple har gjort bort sig igen genom att släppa ett felaktigt program.
S&W och andra belackare vrider sig naturligtvis av skratt.

Snälla Apple, varför inte göra rätt med en gång? Kanske dags att kvalitetssäkra verksamheten?

Citat:

quote:Skapades ursprungligen av: ace4711:
Jag förstår inte. Säger du att 0,9 och 0,1 inte är flyttal?

Nej, det har jag inte sagt; 0,9 och 0,1 är flyttal.

Citat:

quote:Skapades ursprungligen av: Saffran:

Citat:

quote:Skapades ursprungligen av: ace4711:
Jag förstår inte. Säger du att 0,9 och 0,1 inte är flyttal?

Nej, det har jag inte sagt; 0,9 och 0,1 är flyttal.

Då är det väl klart varför jag "envisas" att använda flyttalsberäkningar för att beräkna svaret?

Försök att beräkna 1,09 - 0,90 = ? Du får bara använda en decimal. Du får 1,0 - 0,9 = 0,1. Vilket är fel svar enligt ovan, men förstås helt rätt om man beaktar din begränsningar (specen).

Om du anger 0,1 i en minräknare som bara räknar med 6 decimalers noggrannhet, hur skall den veta att det inte är 0,100000000009 du egentligen vill räkna med? I mitt tidigare exempel försökte jag förklara att 0,1 förhåller sig lika problematiskt i en talbasen 2 som 1/3 gör i talbasen 10.

Jag men snälla ace4711, jag vet att du menar väl och skall inte reta upp dig mer, men du skall få en liten fråga, hur skulle du räkna ut 1 - 0,9 om du inte fick använda flyttal?

Citat:

quote:Skapades ursprungligen av: Saffran:
Jag men snälla ace4711, jag vet att du menar väl och skall inte reta upp dig mer, men du skall få en liten fråga, hur skulle du räkna ut 1 - 0,9 om du inte fick använda flyttal?

Jag som människa kan lätt räkna med oändliga precision om dom är enkla nog. Ditt exempel med 1 - 0,9 kan ju också skrivar som 1,0 (med en oändlig räcka nollor) - 0,9 (med en oändlig räcka nollor). Då kan jag helt plötsligt reducera bort dom båda oändliga räckorna nollor. Och komma fram till att svaret blir exakt en tiondel.

Problemet med flytalsrepresentaion i datorer/miniräknare är att alla flyttal avrundas till en aproximation. I vissa fall råkar avrundningar bli exakt rätt. Ibland är avrundningen bara ganska nära.

Du verkar ha hängt upp dig (vilket är naturligt) på vissa räkneexempel som för dig (som är van att räkna decimalt) råkar gå att beskriva exakt även med få decimaler i det decimala talsystemet.

Ex, 1/10=0,1 exakt. Det kan avrundas till en decimal *utan avrundningsfel* i det decimala talsystemet. 1/3 kan inte avrundas till ändligt antal decimaler utan avrundningsfel i det decimala talsystemet.

I binär form råkar 0,1 förhålla sig på samma sätt som 1/3 gör i det decimala talsystemet. Det går inte att avrunda till ändligt många decimaler utan avrundningsfel.

  • Medlem
  • Stockholm
  • 2002-09-22 13:22

Eehheee… intressant fenomen…

Min kalkylator i OSX visar 1 - 0,9:

BASIC: 0,1
ADVANCED: 0,09999999999999998

Och 1 - 0,9 - 0,1

BASIC: -2,775558e-17
ADVANCED: -2,775557561562891e-17

Som användare föredrar jag 1 - 0,9 = 0,1… Men jag ser gärna också att 0,1 - 0,1 = 0.

Förövrigt så räknar kalkylatorn "rätt" på 1/3*3… Det blir 1, och inte 0,99999 som vissa andra räknare får det till.

Det alltid kul att förstå VARFÖR den räknar för vanligt folk FEL. 1 - 0.9 - 0.1 ÄR lika med 0. Jag har inte satt några siffror för eller efter nått av talen. Detta är något som verkligen bör fixas.

Hur datorn läser upp texten är mindre viktigt…

För mig blir 100 °c = 212 °f som det ska dessutom.

Bevaka tråden