Typomvandling i C
Postat: 29 jan 2013, 20:34
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:
Sista raden funderar jag på lite. Är den tillåten, eller måste jag skriva så här?
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.
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);
Kod: Markera allt
AngleStep=TwoPi/((long double)EndPos-(long double)StartPos);