Optimalizacia konstantneho float vyrazu, was: C xc8

Zuffa Jan ZuffaJ na cgc.sk
Středa Prosinec 6 10:30:42 CET 2017


dwSampleRate je DWORD premenna funkcie a tak sa s nim dalej pracuje
target x86 a prekladac od $MS.
Dalsie detaily nepoviem lebo sa hanbim :)
Otazka je ako napisat riadok 
fSymP = (float)dwSampleRate / 2375.0f; aby daval vzdy rovnaky
vysledok. Kalkulacka mi hovori ze 228000/2375 je presne 96
napriek tomu je v fSymP 95.99998

j.



-----Original Message-----
From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Jan Waclawek
Sent: Wednesday, December 06, 2017 10:15 AM
To: HW-news
Subject: Optimalizacia konstantneho float vyrazu, was: C xc8

C99 v 6.6. stanovuje nejake minimum operacii, ktore musia byt vyhodnotene ako konstantny vyraz pri preklade. Prekladac vsak ma volnost najst aj ine, zlozitejsie vztahy, ktore sa daju takto vyhodnotit, a to moze pokojne byt zavisle na stupni optimalizacie.

Vypocty pri preklade pritom nemusia byt robene presne tak isto ako pri behu programu, C99 predpisuje len to, ze musia mat minimalne taku istu presnost, ale mozu byt aj presnejsie, co vzhladom na to co ten float vlastne je moze pokojne znamenat aj iny vysledok.

Kedze nevieme, co je dwSampleRate, ani o aky prekladac islo a pre aky target, tazko je sa vyjadrit ku konkretnym cislam. V skutocnosti, aj keby si to vsetko prezradil, by to asi bolo tazke... ;-)

wek


----- Original Message ---------------
>Trochu od temy (nie je to xc8), som vcera riesil
>
>float fSymP;
>fSymP = (float)dwSampleRate / 2375.0f;
>m_wRDSDecBy = (WORD)((fSymP / fSamPerSym));
>
>pre dwSampleRate 228000 a fSamPerSym = 8 vyslo bez optimalizacie 
>wRDSDecBy = 12 (spravne), po zapnuti optimalizacie wRDSDecBy = 11 (zle)
>
>Pri zapnutej optimalizacii bolo v fSymP = 95.9999998 pri vypnutej 
>96.0000000. Neviem preco. Vyriesilo to +0.5f Chyba je pravdepodobne v 
>druhom riadku.
>
>j.

_______________________________________________
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