Just nu i M3-nätverket
Gå till innehåll

Praktisk öresutjämning?


Henke-77

Rekommendera Poster

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

 

Länk till kommentar
Dela på andra webbplatser

  • 2 veckor senare...

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

 

Länk till kommentar
Dela på andra webbplatser

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]

Länk till kommentar
Dela på andra webbplatser

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.

 

 

Länk till kommentar
Dela på andra webbplatser

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....

 

Länk till kommentar
Dela på andra webbplatser

Kul...

 

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

 

 

 

/T

 

Länk till kommentar
Dela på andra webbplatser

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.

 

 

Länk till kommentar
Dela på andra webbplatser

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...

 

Länk till kommentar
Dela på andra webbplatser

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.

 

 

Länk till kommentar
Dela på andra webbplatser

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å)

 

Länk till kommentar
Dela på andra webbplatser

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

 

 

Länk till kommentar
Dela på andra webbplatser

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..

 

Länk till kommentar
Dela på andra webbplatser

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

 

 

Länk till kommentar
Dela på andra webbplatser

  • 2 veckor senare...

 

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.

 

 

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...