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.
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.
>tudtak rendesen számolni
Harom percet szantam egy gyors JS, Python, Java, C++-ra. Ezzel kabe ma a szoftverfejlesztes 80%-at le is fedem. Mindegyikben -2.77556e-17 jott ki.
MERT EZ NEM NYELVFUGGO, ez ieee szabvany... Kicsit olvassatok mar.
É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.
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.
Csak azért voltak, mert ma már nem lehet újonnan kapni.
Amúgy nem árt néha az elemre ránézni, nehogy úgy járj mint én: kifolyt, és azóta nem kapcsol be a számológép. :c
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.
Hozzászólások
nem algebra vagy milyen módban van a galculator.?
--
God bless you, Captain Hindsight..
Algebra módban.
--
A főnököm mindig megtartja amit ígér, ha pénzt ígér azt is!
JavaScript: -2.7755575615628914e-17
a bc az mi, ami 0-át produkál? :)
http://www.manpagez.com/man/1/bc/
Üdv,
Marci
omfg
------------------------
Program terminated
{0} ok boto
boto ?
Ez bizony ilyen. Pl.: https://docs.python.org/2/tutorial/floatingpoint.html
bc bug :)
A legkimerítőbb írás, amit valaha olvastam a témában: https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-n…
--
Nice one!
--
http://naszta.hu
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:
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!
Világos. Azon továbbra is meglepődöm, ha 28 év alatt - gondolom IT területen - ezzel egyszer sem találkozik valaki.
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.
omfg.
>tudtak rendesen számolni
Harom percet szantam egy gyors JS, Python, Java, C++-ra. Ezzel kabe ma a szoftverfejlesztes 80%-at le is fedem. Mindegyikben -2.77556e-17 jott ki.
MERT EZ NEM NYELVFUGGO, ez ieee szabvany... Kicsit olvassatok mar.
És ha a kolléga kizárólag dc-ben megírandó feladatokkal foglalkozott eddigi munkája során? Úgy könnyen érzi magát biztonságban az ember.
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.
--
omfg = "MERT EZ NEM NYELVFUGGO, ez ieee szabvany"
>JS, Python, Java, C++
added
Igaz, clippert nem nézegettem. :'-(
Kösz az entryt, látom több év után összejött öt aktív, ilyenkor nem jár valami pirospont, vagy mialófasz?
már hogy úgy érted szerény véleményed szerint 5 az már valami a hupmeme-ben?
752813 Mar 7 20:52 hupmeme.htm
Óóóóhellnóó.
Ha a piros pont nem is, a lófasz csak meglett...
:)
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!
Ha mikor Ct tanítottak nem beszéltek a floating pointról, akkor vagy átaludtad, vagy valami ritka nagy dilettáns tartott órát.
szerk: lejebb olvastam, hogy a 0.1 ábrázolhatóságára értetted, szorri.
Pótoljuk be, amit az iskola vagy az odajáró eddig elmulasztott: https://www.youtube.com/watch?v=PZRI1IfStY0
gnome-calculator mesterfaj jelentkezik: 0-t kapok eredményül
Sőt!
SHARP EL-531A mesterfaj jelentkezik: 0-t kapok eredményül. :)
Üdv,
Marci
Jó kis számológépek voltak ezek. :3
Voltak? Napi használatban van, 1988 óta... :)
Ezzel együtt már az idejére sem emlékszem, mikor cseréltünk benne elemet...
Üdv,
Marci
Csak azért voltak, mert ma már nem lehet újonnan kapni.
Amúgy nem árt néha az elemre ránézni, nehogy úgy járj mint én: kifolyt, és azóta nem kapcsol be a számológép. :c
:( R.I.P.
Nota bene, az akkori gombelemek se nagyon folytak ki...
Kár, hogy a régi jó dolgokból nem maradt semmi... :)
Üdv,
Marci
Az én számológépembe 2 db AA-s elem kellett.
Most nézem, hogy nem ugyan az a modell (EL-230), csak a dizájnjuk hasonló...
A gcalctool is 0-át saccol.
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)
Akkor most próbáld ki ugyanezeket mondjuk %.20f formázással...
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.
.
Ruby:
("1.0".to_r - "0.9".to_r - "0.1".to_r).to_f = 0.0 ;)
http://hup.hu/node/134896