floor
Prev | Orchestra Opcodes and Operators | Next

## floor

floor — Returns the largest integer not greater than x

## Description

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 326. Example of the floor 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 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.

Example 327.

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

Prev | Up | Next
flooper2 | Home | FLpack