Optimalizacia konstantneho float vyrazu, was: C xc8

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


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


Další informace o konferenci Hw-list