Just nu i M3-nätverket
Jump to content

Praktisk öresutjämning?


Henke-77

Recommended Posts

Tja, lägg till en femtioöring (0,5) och skippa decimalerna. Så gjorde jag i ett program. Visserligen var det proggat i C, men borde funka ungefär likvärdigt när det gäller VB.

__________________________________

Sakta men säkert ska jag äta upp dom !

b all the *nörd* u can b - Tekno

 

Link to comment
Share on other sites

  • 2 weeks later...

function öretsutjämning(summa as double) as double

dim s as double

s = (summa - int(summa))

if s >= 0 and s < 0.25 then

'Avrunda neråt

öretsutjämning = int(summa)

elseif s > 0.75

'Avrunda uppåt

öretsutjämning = int(summa) + 1

else

'Avrunda till närmsta femtioöring

öretsutjämning = int(summa) + 0.5

endif

end function

 

Link to comment
Share on other sites

Femtioöringen oxå, utan if-satser:

 

double even(sum double) {

return (double)((int)(sum*2+0.5) / 2);

}

 

-

 

(testar i VB - kan inte VB dock ;)

 

function öresutj(sum as double) as double

öresutj = double(int(sum*2+0.5) / 2)

end function

 

Vet inte om den funkar, men blev rätt med testdata: 3.45, 3.25, 3.24 och 3.60 iaf..

 

--

.Weyland - bättre algoritmer åt folket!

 

2. Everything around us can be represented and understood through numbers.

[inlägget ändrat 2002-09-23 19:10:19 av Weyland]

Link to comment
Share on other sites

Härligt att se att någon bryr sig om de stackars processorcyklerna!

 

Poäng till dig Weyland...

/Mn

Slartibartfast: Is that your robot? Marvin: No. I'm mine.

 

 

Link to comment
Share on other sites

hmmm, om man kompilerar våra funktioner och disamblerar dom (bara testat i vb) så använder min ca 20% färre cykler än weilands, bara en iaktagelse....

 

Link to comment
Share on other sites

Kul...

 

enkel förklaring - Trash1 nyttjar enkla logiska funktioner medans Weyland nyttjar beräkning och typformatering.

 

 

 

/T

 

Link to comment
Share on other sites

Haha! Där ser man hur det kan gå.

Om du orkar vore en jämförelse mellan vb och c++, samt mellan de olika funkitionerna i c++ kul att se.

 

/Mn

Slartibartfast: Is that your robot? Marvin: No. I'm mine.

 

 

Link to comment
Share on other sites

C++ varianten har fördel av att kunna kompileras utan den overhead vb ger så den är snabbast, men tar man däremot bort overheaden som vb ger är Weylands två metoder likadana. Det intressanta är att man kan klippa bort ca 30% av processorns förbrukning av cykler genom att använda lite bitwise operatorer i weylands funktion och därigenom göra den snabbare än min...

 

Link to comment
Share on other sites

Hur ser koden ut då (med bitwise operatorer alltså)? Går den fortfarande att göra i vb?

 

/Mn

Slartibartfast: Is that your robot? Marvin: No. I'm mine.

 

 

Link to comment
Share on other sites

Tufft!

 

Jag tänkte kommentera mitt inlägg och be någon avgöra huruvida det var mer eller mindre resurskrävande än if-satserna egentligen, för ärligt talat var jag osäker :) (med tanke på dagens kompilatorer åså)

 

Link to comment
Share on other sites

Den går inte att göra i vb, skulle bli ngt sånt här i assembler:

 

mov eax, sum

rol eax

inc eax

ror eax

 

motsvarar:

(sum*2+0.5) / 2

 

 

Link to comment
Share on other sites

Nä, det skulle inte gå om det var decimaltal vi jobbade med, men du får inte missa att sker cast till en integer innnan resultet skickas tillbaka..

 

Link to comment
Share on other sites

Hur kan du få "inc eax" att motsvara +0.5 ?

 

cast till en integer innnan resultet skickas tillbaka

Det skickas tillbaka som en Double.

Divisionen ligger efter Int-funktionen.

 

Det går inte att lösa med ror och rol..

 

\\Anp

 

 

Link to comment
Share on other sites

  • 2 weeks later...

 

Tjenare grabbs!

 

Kul att ni skriver. Jag tog Wångs alternativ, då det redan liknade mitt som jag hade innan. Hade rört ihop det lite bara. Det funkar så klart och fortsätt babbla om ni vill det.

 

 

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...