Optimalizacia konstantneho float vyrazu, was: C xc8

Zuffa Jan ZuffaJ na cgc.sk
Středa Prosinec 6 13:51:31 CET 2017


to by tym padom sedelo.
vdaka za vysvetlenie :)

j.

-----Original Message-----
From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Ales Prochaska, Divesoft
Sent: Wednesday, December 06, 2017 1:41 PM
To: HW-news
Subject: Re: Optimalizacia konstantneho float vyrazu, was: C xc8

Jestli je to nějaký optimalizující překladač tak může sám nahrazovat dělení konstantou násobením, takže tohle bych neřešil :-)

Aleš Procháska

> 1. deli sa len 1x pri inicialzacii takze tu nic neusetrim (ano, 
> nasobenie je lacnejsie ale na druhej strane
>    zneprehladnuje kod)  a pri inom SampleRate by sa chyba prejavila opat
>     chyba -0.00002 vo vysledku vlastne nevadi, pretoze spravny vypocet mal aj tak vypadat takto:
>     m_wRDSDecBy = (WORD)((fSymP / fSamPerSym)+0.5f);
>     V reale ma byt SampleRate vzdy nasobok 2375 co vsak nie vzdy je mozne a navyse
>    chyba > 1 sposobuje casty rozpad casovania symbolov 2. spoliehal 
> som sa na IDE a vypis z printf. je potom zaujimave ze
>     DBGLOG(m_iDbgRDS, LVL_WARNING, "%d %f %f", m_wRDSDecBy, fSymP, fSamPerSym);
>    (vnutorne vola printf) vypise fSYmP raz ako 96.0000 a raz ako 95.99998
>   tu neverim ze by kompilator tuto premennu nejako manipuloval pretoze 
> su na nej zavisle  formatovacie znaky.
> V kazdom pripade je to zaujimave spravanie ktore ma riesenie ale nema 
> vysvetlenie
> (zatial) a stalo ma hodinu casu :)

> j.

> -----Original Message-----
> From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of 
> Miroslav Mraz
> Sent: Wednesday, December 06, 2017 1:00 PM
> To: hw-list na list.hw.cz
> Subject: Re: Optimalizacia konstantneho float vyrazu, was: C xc8

> Co zkusit něco jako
> fSymP = (float)dwSampleRate * 0,000421053f; fSymP je pak asi tak 
> 96,000084

> 1. násobit je levnější než dělit
> 2. přesně to nikdy nebude, zkuste si ta čísla faktorizovat.

> Mrazík


> Dne 6.12.2017 v 10:30 Zuffa Jan napsal(a):
>> 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.
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz Hw-list na list.hw.cz 
> http://list.hw.cz/mailman/listinfo/hw-list
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz Hw-list na list.hw.cz 
> http://list.hw.cz/mailman/listinfo/hw-list


_______________________________________________
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