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