round

round — Returns the integer value nearest to x ; if the fractional part of x is exactly 0.5, the direction of rounding is undefined and may depend on the host operating system and Csound version.

Description

The integer value nearest to x ; if the fractional part of x is exactly 0.5, the direction of rounding is undefined.

Syntax

round(x) (init-, control-, or audio-rate arg allowed)
round(k/i[]) (k- or i-arrays )

where the argument within the parentheses may be an expression. Value converters perform arithmetic translation from units of one kind to units of another. The result can then be a term in a further expression.

Examples

Here is an example of the round opcode. It uses the file round.csd.

Example 923. Example of the round opcode.

See the sections Real-time Audio and Command Line Flags for more information on using command line flags.

<CsoundSynthesizer>
<CsOptions>
; Select audio/midi flags here according to platform
-odac     ;;;realtime audio out
;-iadc    ;;;uncomment -iadc if realtime audio input is needed too
; For Non-realtime ouput leave only the line below:
;-o round.wav -W ;;; for file output any platform
</CsOptions>
<CsInstruments>

sr = 44100
ksmps = 32
nchnls = 2
0dbfs  = 1

instr 1

idiv init 1

loop:
inumber = 9
i1  = inumber / idiv
iro =  round(i1)
print inumber, idiv, iro ;print number / idiv = result using round
idiv = idiv + 1
if (idiv <= 10) igoto loop

endin
</CsInstruments>
<CsScore>

i 1 0 0
e

</CsScore>
</CsoundSynthesizer>


Its output should include a line like these:

instr 1:  inumber = 9.000  idiv = 1.000  ifl = 9.000
instr 1:  inumber = 9.000  idiv = 2.000  ifl = 5.000
instr 1:  inumber = 9.000  idiv = 3.000  ifl = 3.000
instr 1:  inumber = 9.000  idiv = 4.000  ifl = 2.000
instr 1:  inumber = 9.000  idiv = 5.000  ifl = 2.000
instr 1:  inumber = 9.000  idiv = 6.000  ifl = 2.000
instr 1:  inumber = 9.000  idiv = 7.000  ifl = 1.000
instr 1:  inumber = 9.000  idiv = 8.000  ifl = 1.000
instr 1:  inumber = 9.000  idiv = 9.000  ifl = 1.000
instr 1:  inumber = 9.000  idiv = 10.000  ifl = 1.000
      

Here is an example for the rounding-group, comparing the different rounding opcodes. It uses the file rounding-group.csd.

Example 924. Example of the rounding group.

<CsoundSynthesizer>
<CsOptions>
-odac       ;   
</CsOptions>
<CsInstruments>

sr = 44100
ksmps = 32

; by tgrey 2020
instr 1

iLoopStart = p4
iLoopEnd   = p5
iOffset    = p6

iCount init iLoopStart

	
if(iLoopStart<iLoopEnd) then		; loop going up
	while iCount <= iLoopEnd do
		iVal = iCount+iOffset
		iRound = round(iVal)
		iInt = int(iVal)
		iFloor = floor(iVal)
		iCeil = ceil(iVal)
		print iVal, iRound, iInt, iFloor, iCeil
		iCount = iCount + 1		
	od
	
elseif(iLoopEnd<iLoopStart) then	; loop going down
	while iCount >= iLoopEnd do
		iVal = iCount+iOffset
		iRound = round(iVal)
		iInt = int(iVal)
		iFloor = floor(iVal)
		iCeil = ceil(iVal)
		print iVal, iRound, iInt, iFloor, iCeil
		iCount = iCount - 1		
	od
endif
endin
</CsInstruments>
<CsScore>
i1 0 .1 0 10 .5
i1 .2 .1 0 -10 .5
e
</CsScore>
</CsoundSynthesizer>


See Also

abs, exp, int, log, log10, i, sqrt

Credits

Author: Istvan Varga
New in Csound 5
2005