Ez most hogy?

Fórumok

Feladat:


1.0 - 0.9 - 0.1 = 0

Galculator: -2.77555756156e-17
Xcalc: -2.77555e-17
bc: 0
PHP: -2.7755575615629E-17

Hozzászólások

nem algebra vagy milyen módban van a galculator.?
--
God bless you, Captain Hindsight..

JavaScript: -2.7755575615628914e-17

a bc az mi, ami 0-át produkál? :)

A 0.1 nem ábrázolható kettes számrendszerben véges kettedestörtként (ezért van .NET-ben decimal típus).

Ugyanúgy, ahogy az 1/3 nem ábrázolható véges tizedestörtként. De pl. 3-as számrendszerben véges (0.1).

Fuszenecker Róbert

Én rendszeresen meglepődöm, hogy ezen rendszeresen meglepődnek... :-(

Egyetem első évében...
Már egy erősebb középiskolában...
Még mit nem, esetleg az interneten eldugva, fellelhetetlen módon...

De nem.

A HUP, az kell az ismeretszerzéshez. Az.

Kb 28 éve volt hogy végeztem a középiskolában. A matematika nem emelt szintű és nem is infós volt. Egyébként igen meglepődtem.

Most így nekiláttam és megnéztem az alábbi műveletet:


1.0-0.1-0.1-0.1-0.1-0.1-0.1-0.1-0.1-0.1-0.1=0
eredmények közben (galculator):
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
és a végén:
-5.55111512313e-17

A lentebb linkelt videót is megnéztem. Így már értem nagyjából.
Kipróbáltam a Win7 számológépét is. Az helyesen nullát ír.

--
A főnököm mindig megtartja amit ígér, ha pénzt ígér azt is!

Nem értem miért. Az IT terület "marha nagy" :). Pld. én sem tudtam róla, nekem sem említették '93-ig a problémát egyetlen tantárgyban sem, az akkori programozási tantárgyak (DOS/BASIC, Assembly, C, Pascal, dBase/Clipper, Sql stb. keretében sem merült fel - "sajnos" nem számológépet kaptam vizsgafeladatként, mert akkor talán az assembly/c vonalon belefutok a problémába. Az élet meg úgy hozta, hogy azóta a programozási tapasztalatom olyan nyelvekre korlátozódott, amelyek tudtak rendesen számolni :)

De ha teszem azt valaki HW vagy üzemeltetés vonalom mozog, és hasonlóan nem említi meg neki senki (mert amikor diplomázott még nem volt tanagyag) akkor leélheti úgy az életét IT területen, hogy nem is tud a jelenségről, és pont itt a HUP-on találkozik vele.

Ne kattints ide!

"mert amikor diplomázott még nem volt tanagyag"

Ilyen állat pedig nincs. Minél régebben került valaki erre a pályára, annál inkább tudni kellett (volna) a dobozba rejtett határokról.

Hogy nem mindenkinek volt érdekes az alapozás alapozásának számító bináris számábrázolás és aritmetika, illetve az is csak egy utolsó éjszaka felkészülős és az azt követő első berúgással elfelejtős téma volt, azt inkább elhiszem.

Mire fel az omfg, a maradék 20% nem számít?

Én kb. 8 év .NET-ezés alatt kb. egyszer sem használtam munka közben floating pointot, decimalt annál inkább (üzleti szektor, pénzügyi és hasonló számítások). Oracle-ben ugyanez. Speciel vagyok olyan kocka, hogy ettől még a floating pointot is ismertem, de ez semmit nem számított.

Azt nem vitatom viszont, hogy ha valaki már deklarál egy floating point változót, akkor tudja, hogy mi van benne. És az epszilonos hasonlításnál sokkal többről van szó, ld. fenti linkem.

--

Ott volt Smy Lee!

De Pld. Clipperben a kérdéses példa alapesetben 0.0-t ad eredménynek. (Ha "erőszakkal" pld. 30 tizedesig íratom ki az eredményt, akkor kiderül a "turpisság", de erre gyanítom a Clipper életciklusa során nem sűrűn volt szükség, nekem sosem kellett, a könyvelők amúgy is ezres tételekben gondolkodnak :D )

A C64 sqr(25^2) "anomáliájára" a mai napig emlékszem. Én konkrétan erre a 0.1-s példára értettem, hogy az IT területén az ember leélheti úgy az életét, hogy nem találkozik vele. Gyanítom, hogy anno a tanárom nem hozta fel ezt példaként (mert ez szerintem iskolapélda, örökre bent marad az emberben és az első koleszbuli sem mossa ki az agyból :) ). Egyébként már nem emlékszem hogy '91-ben a Kandón milyen mélységekben oktatták témát. Mivel műegyetemes ismerőseink irígykedtek ránk, hogy hozzájuk képest mi géppel kelünk és fekszünk, elképzelhető, hogy nem mélyedtünk el túlságosan. A C64 óta nem futottam bele hasonló problémába. Most meg már nem fejlesztés a munkám, így ha nem olvasom a topikot, akkor lehet, hogy úgy halok meg, hogy nem tudok a 0.1 jelenségről.

Ne kattints ide!

gnome-calculator mesterfaj jelentkezik: 0-t kapok eredményül

C moka:

float a=1.0, b=0.9, c=0.1;
printf("%f %f %f = %f\n", a, b, c, a-b-c);

1.000000 0.900000 0.100000 = 0.000000

double a=1.0, b=0.9, c=0.1;
printf("%f %f %f = %f\n", a, b, c, a-b-c);

1.000000 0.900000 0.100000 = -0.000000

--
"Van olyan ember sok az oldalon, akinek a kommentjeinek 100%-a zaj, oket miert nem kommentelitek ilyen lelkesen?" (hrgy84)

float: 1.00000000000000000000 0.89999997615814208984 0.10000000149011611938 = 0.00000002235174179077
double: 1.00000000000000000000 0.90000000000000002220 0.10000000000000000555 = -0.00000000000000002776

--
"Van olyan ember sok az oldalon, akinek a kommentjeinek 100%-a zaj, oket miert nem kommentelitek ilyen lelkesen?" (hrgy84)

program proba;
uses sysutils;

begin
writeln (FloatToSTR(1 - 0.9 - 0.1));
end.

2.03287907341032E-20

:D

Az igazi problémák akkor jönnek, ha összehasonlítasz!
Marha nagyot lehet szívni, ha egy if - ben azt hiszed, hogy
egyszercsak egyenlő lesz nullával egy érték, azt mégse.

Én így szoktam:


#define LIMIT 0.00000001
double dVariable;
if (fabs(dVariable) < LIMIT)

Persze a LIMIT értékét attól függően választom, hogy éppen
mi a feladat.

> Sol omnibus lucet.