Typomvandling i C

Här diskuteras programmering och utveckling
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Typomvandling i C

Inlägg av Johnny Rosenberg »

Ser att denna del av forumet verkar stendöd för tillfället; inte ett enda inlägg i år, men jag gör ett försök i alla fall.

Håller på med ett litet projekt (i C) som är dömt att misslyckas (mest på grund av att det är jag som ligger bakom…), som vanligt, men skam den som ger sig på ett så här tidigt stadium. Håller just nu på med att knåpa ihop diverse småfunktioner som ska göra livet lite lättare för mig längre fram i projektet, men jag har ännu inte börjat testa dem.

Jag har i alla fall fått lite funderingar på hur och när man måste typomvandla. Förmodligen närhelst man har med flera olika typer att göra samtidigt i samma formel… men man kan ju kanske göra på lite olika sätt. Sedan vill man ju inte att saker ska göras i onödan heller, och fort ska det gå, samtidigt som jag vill vara på den säkra sidan när det gäller precision…

Exempel:

Kod: Markera allt

FLAC__uint64 StartPos, EndPos;
long double AngleStep;
FLAC__uint64 Sample, Index;
const long double TwoPi=6.283185307179586476925287L; // 2π

AngleStep=TwoPi/(long double)(EndPos-StartPos);
Sista raden funderar jag på lite. Är den tillåten, eller måste jag skriva så här?

Kod: Markera allt

AngleStep=TwoPi/((long double)EndPos-(long double)StartPos);
Om båda skrivsätten är tillåtna var min tanke att det första borde gå fortare, dels eftersom jag bara behöver typomvandla en gång, dels eftersom (tror jag) det går fortare att subtrahera två 64-bitars heltal än att subtrahera två extra långa flyttal.
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Typomvandling i C

Inlägg av Konservburk »

Jag tror du övertänker. Eftersom TwoPi redan är long double så kommer resultatet av (EndPos-StartPos) att omvandlas till long double innan divisionen utförs oavsett hur du försöker typomvandla. Nöj dig med detta:

Kod: Markera allt

AngleStep = TwoPi / (EndPos - StartPos);
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Re: Typomvandling i C

Inlägg av Johnny Rosenberg »

Konservburk skrev:Jag tror du övertänker. Eftersom TwoPi redan är long double så kommer resultatet av (EndPos-StartPos) att omvandlas till long double innan divisionen utförs oavsett hur du försöker typomvandla. Nöj dig med detta:

Kod: Markera allt

AngleStep = TwoPi / (EndPos - StartPos);
Hm… har för mig att jag svarade på denna, men det verkar vara borta nu…
Villa bara tacka för svaret i alla fall. Problemet löst. :)
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Skriv svar

Återgå till "Programmering och webbdesign"