Hur räkna ut detta utan flyttal?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Erik_Lind
Inlägg: 97
Blev medlem: 2 maj 2005, 11:25:03

Hur räkna ut detta utan flyttal?

Inlägg av Erik_Lind »

Jag skulle behöva göra följande uträkning utan att använda flyttal:

Jag misstänker att om man förstår sig på mattematik så borde det gå.

reg0 = 37758;
reg1 = 1;

svar = 3,2*(reg1+(reg0/65536))

--

Kod: Markera allt

#include <inttypes.h>

int main(void)
{
  uint16_t reg0, reg1;
  float result = 0;

  reg0 = 37758;
  reg1 = 1;

  result = 3.2*((float)(reg1)+(float)(reg0)/65536.0);

  printf("\r\n%6.5fns\r\n", result); // Svar 5.04365ns

}
Användarvisningsbild
karlstedt
EF Sponsor
Inlägg: 966
Blev medlem: 14 oktober 2003, 16:55:23
Ort: Lund
Kontakt:

Inlägg av karlstedt »

fixed point är en användbar metod
Erik_Lind
Inlägg: 97
Blev medlem: 2 maj 2005, 11:25:03

Inlägg av Erik_Lind »

Jo, jag tycker man hör det lite då och då.
Men jag har aldrig förstått mig på det där med fixed point.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Att 65536 = 2^16 är ju en bra "hint" att det sannolikt
finns någon enkel "binär" metod att lösa det. I alla fall
divisionen (16 bit-shift till höger) :-)

Men ofta ligger svaret på dessa frågor i förståelsen av var
datat kommer från. Någon slags givare eller tidmätning kanske ?
Erik_Lind
Inlägg: 97
Blev medlem: 2 maj 2005, 11:25:03

Inlägg av Erik_Lind »

Jo, jag läser in en tid och får den i följande format:

----------
Register contents resulting value
Integer portion.Fractional portion

0x0001.ABCD 1.671096 (result of: 1+43981/65536)
-----------

där
reg0 = 0x0001
reg1 = 0xABCD

Sen har jag en klocka som ger mig en periodtid på 3.2us
Så talet ovan är alltså (1.671096 * 3,2 ) 5,3475ns
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

3,2*(reg1+(reg0/65536)) = t i ns

Kan omskrivas till

(3200 * (reg1 * 65536 + reg0)) / 65536 = t i ps

3200 * 109517 = 3504544 / 65536 = 5347 ps = 5,347 ns

Bara heltal.....
Erik_Lind
Inlägg: 97
Blev medlem: 2 maj 2005, 11:25:03

Inlägg av Erik_Lind »

Stort tack.

Det var precis så jag ville ha det.

/Erik
Skriv svar