Skip to content

floor

Returns the largest integer not greater than x

Syntax

floor(x) (init-, control-, or audio-rate arg allowed)
floor(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 floor opcode. It uses the file floor.csd.

Example of the floor opcode.
<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 floor.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
ifl = floor(i1)
print inumber, idiv, ifl ;print number / idiv = result using floor
idiv = idiv + 1
if (idiv <= 10) igoto loop

endin
</CsInstruments>
<CsScore>

i 1 0 0
e

</CsScore>
</CsoundSynthesizer>

The output should include lines like these:

instr 1:  inumber = 9.000  idiv = 1.000  ifl = 9.000
instr 1:  inumber = 9.000  idiv = 2.000  ifl = 4.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 = 1.000
instr 1:  inumber = 9.000  idiv = 6.000  ifl = 1.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 = 0.000

Here is another example of the floor opcode. It uses the file floor2.csd.

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

; By Stefano Cucchi 2024
</CsOptions>
<CsInstruments>

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

instr 1

gkrandom randomh 1, 45, 300, 2,  3 ; generate some random numbers
gkrandomFLOOR = floor (gkrandom)   ; take the integer part
gkrandomFRAC = frac (gkrandom)     ; take the fractional part

endin

instr 10

  ktrigger metro 4
  kmintim = 0
  kmaxnum = 10
  kinsnum = 20
  kwhen = 0
  kdur = ktrigger*0.25
  schedkwhen ktrigger, kmintim, kmaxnum, kinsnum, kwhen, kdur

endin

instr 20

  irandomFLOOR = i(gkrandomFLOOR) 
  irandomFRAC = i(gkrandomFRAC)

  ; Use the integer part to control the number of harmonics of every note
  ; after converting (k) value to (i)
  prints "generated value = %f\n", i(gkrandom)
  prints "--> floor value = %d\n", irandomFLOOR
  a1 buzz 0.5, 120, irandomFLOOR, 1 

  kenvelope linseg 0, p3*0.1, 1, p3*0.8, 1, p3*0.1, 0

  a1 = a1*kenvelope

  aL, aR pan2 a1, irandomFRAC, 1 ; use the fractional part to control the pan position 
  outs aL, aR

endin

</CsInstruments>
<CsScore>

f 1 0 16384 10 1

i 1 0 10
i 10 0 10 
e
</CsScore>
</CsoundSynthesizer>

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

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

Mathematical Functions

Credits

Author: Istvan Varga
New in Csound 5
2005