OT Ceckarsky kviz

Miroslav Šinko sinkomiro na gmail.com
Středa Leden 26 18:19:54 CET 2022


OK, tie pravidla, co musi byt, som si nepamatal. Kazdopadne najprv to
neskompilovalo ani Tvoj originalny priklad. Az nasledne som vyraz
zjednodusoval. Toto je uz dufam ok:

double d2 = 0x1.1P2;

 error C2059: syntax error : 'bad suffix on number'
 error C2143: syntax error : missing ';' before 'constant'
 error C2146: syntax error : missing ';' before identifier 'P2'
 error C2065: 'P2' : undeclared identifier

Original:

printf("%f", 0x1C2D.3EP4F);

error C2021: expected exponent value, not 'P'
error C2059: syntax error : 'bad suffix on number'
error C2143: syntax error : missing ')' before 'constant'
error C2059: syntax error : ')'

Inac ja som ten vyraz pochopil a rucne som ho (za pouzitia kalkulacky)
vyratal este pred pokusmi s kompilatorom: 115417.92
Aj mail som mal rozpisany, ale reku mozno je to chytak, ani kompilovat
to nejde..  A potom tu boli narazky na kompilatory, tak som to nechal
tak a zareagoval len na ten kompilator.

miro

st 26. 1. 2022 o 18:04 Jan Waclawek <konfera na efton.sk> napísal(a):
>
> Lebo to nie je len tak mirnix-dirnix exponent.
>
> Funguje len tak, ze
> - na zaciatku MUSI byt 0x alebo 0X (t.j. hexadecimalny prefix)
> - potom hexadecimalne cislo
> - potom MUSI byt bodka
> - potom MOZU byt dalsie hexadecimalne znaky
> --- potialto je to mantisa (*)
> - potom MUSI byt p alebo P
> - potom nasleduje binarny exponent v desiatkovom tvare s volitelnym
> znamienkom (**)
> - potom MOZE byt f alebo F (pre float) alebo l alebo L (pre double) ako u
> "normalnej" konstanty s pohyblivou radovou ciarkou
>
> Z tychto pravidiel je jasne, ze preco Ti ani jeden z tych pokusov nevysiel
> - v prvom chyba prefix 0x, v druhom chyba bodka pred P (co mimochodom ten
> kompilator aj napisal, aj ked nechapem preco zmenil velkost toho p, ale
> nemusim chapat vsetko).
>
> Ten moj priklad bol 0x1C2D.3EP4F - rozoberme si ho:
>
> (*) Mantisa je hexadecimalna zlomkova t.j. N cifier za bodkou znamena ze sa
> to cislo za bodkou vydeli 16^N a pricita k cislu pred bodkou. Tu je cela
> cast 0x1C2D, t.j. desiatkovo 7213. Zlomkova cast je 0x3E (ano, naschval
> som vybral take aby tam bolo to E, aby to vyzeralo ako to co sa pouziva
> pri desiatkovej floating-point konstante - ono je to P presne kvoli tomu,
> lebo E sa neda pouzit), t.j. 62/16^2=0.2421875. Takze mantisa je
> 7213.2421875.
>
> (**) Exponent je tu 4 (to F na konci je znova na zmatenie nepriatela -
> exponent je *desiatkovy* a moze byt pred nim znamienko; to F je float
> suffix), je to binarny exponent, t.j. mantisu vynasibime 2^exponent,
> 7213.2421875*2^4=115411.875
>
> Tiez som na to prisiel uplne nahodou, skumanim normy C99 (6.4.4.2) :-)
>
> Vyhoda (ano, ja viem, malokto takuto vyhodu oceni) tohoto formatu je, ze ak
> sa nenapise privela cifier v mantise, tak ta floating-point reprezentacia
> je presna (co u desiatkoveho zapisu je skor vynimka). Dokonca norma v
> odstavci 6 odkazovanej kapitoly doporucuje, aby v pripade, ze pre takuto
> konstantu nastane zaokruhlenie (t.j. ked sa napise privela cifier),
> prekladac vypisal warning.
>
> wek
>
>
> ----- Original Message ---------------
>
> >Mne napr. Visual Studio 2005 ani 2013 nezoberu 'P' ako exponent. Oba
> >tieto jednoduche riadky hodia chybu
> >
> >double d1 = 1p2;
> >double d2 = 0x1P2;
> >
> >error C2059: syntax error : 'bad suffix on number'
> >error C2146: syntax error : missing ';' before identifier 'p2'
> >
> >miro
> >
> >st 26. 1. 2022 o 16:43 Jindroush <jindroush na seznam.cz> napísal(a):
> >>
> >> No, pote, co jsem odeslal moje 'reseni', zkusil jsem to na godboltu a
> >> netrefil jsem jediny compiler, co by to nevzal. To jste zkousel na cem?
> >> J.
> >>
> >> On 26.01.2022 16:12, Jiří Nesvačil wrote:
> >> > Lexer zahlasi chybu. Neboli kompilace na urovni prebirani tokenu,
> >> > slov, zjisti, ze se jedna o nepreveditelne slovo. Mozna nejaky pra
> >> > kompiler to zvladne, ale obecne NE.
> >> >
> >> > Dne 26.01.2022 v 16:00 Jan Waclawek napsal(a):
> >> >> Bez toho aby ste skusili kompilovat, uhadnite, co vypise toto:
> >> >>
> >> >>    printf("%f", 0x1C2D.3EP4F);
> >>
> >> --
> >> Jindroush <jindroush na seznam.cz>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list


Další informace o konferenci Hw-list