Floor: Difference between revisions

Jump to navigation Jump to search
1,787 bytes added ,  16:27, 24 December 2023
m
m (Text replacement - "<source" to "<syntaxhighlight")
 
(3 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Built-in|Floor|⌊}} is a [[monadic]] [[scalar function]] that gives the [[wikipedia:floor and ceiling functions|floor]] of a real number, that is, the greatest integer [[Comparison tolerance|tolerantly]] [[less than or equal to]] the given value. This operation is also known as '''integral part''', '''entier''', and '''round down'''. Floor shares the [[glyph]] <syntaxhighlight lang=apl inline>⌊</source> with the dyadic arithmetic function [[Minimum]]. [[Comparison_with_traditional_mathematics#Prefix|Traditional mathematics]] derives [[Ken_Iverson#Floor_and_Ceiling|its notation]] and name for floor from APL.
{{Built-in|Floor|⌊}} is a [[monadic]] [[scalar function]] that gives the [[wikipedia:floor and ceiling functions|floor]] of a real number, that is, the greatest integer tolerantly<ref>[[Robert Bernecky|Bernecky, Robert]]. [https://www.jsoftware.com/papers/satn23.htm "Comparison Tolerance"]. Sharp APL Technical Notes. 1977-06-10;.</ref> [[less than or equal to]] the given value. This operation is also known as '''integral part''', '''entier''', and '''round down'''. Floor shares the [[glyph]] <syntaxhighlight lang=apl inline>⌊</syntaxhighlight> with the dyadic arithmetic function [[Minimum]]. [[Comparison_with_traditional_mathematics#Prefix|Traditional mathematics]] derives [[Ken_Iverson#Floor_and_Ceiling|its notation]] and name for floor from APL.


== Examples ==
== Examples ==
Line 8: Line 8:
       ⌊2 2.8 ¯2 ¯2.8
       ⌊2 2.8 ¯2 ¯2.8
2 2 ¯2 ¯3
2 2 ¯2 ¯3
</source>
</syntaxhighlight>


Rounding to the ''nearest'' integer (rounding up on half) can be achieved by [[add|adding]] 0.5 before applying Floor.
Rounding to the ''nearest'' integer (rounding up on half) can be achieved by [[add|adding]] 0.5 before applying Floor.
Line 15: Line 15:
       ⌊0.5+2 2.3 2.5 2.8
       ⌊0.5+2 2.3 2.5 2.8
2 2 3 3
2 2 3 3
</source>
</syntaxhighlight>


Integral quotient of division can be found with [[divide|division]] followed by Floor.
Integral quotient of division can be found with [[divide|division]] followed by Floor.
Line 22: Line 22:
       ⌊10 20 30÷3
       ⌊10 20 30÷3
3 6 10
3 6 10
</source>
</syntaxhighlight>


== Properties ==
== Properties ==
Line 36: Line 36:
       ⌊v
       ⌊v
0 1 1
0 1 1
</source>
</syntaxhighlight>
 
== Model ==
 
Floor can very easily be modelled using residue like:
 
<syntaxhighlight lang=apl>
      model←{⍵-1|⍵}
</syntaxhighlight>
 
To model it without using residue, because residue uses floor under the hood, approaches like converting to strings and then stripping the decimal component or converting to binary and stripping the decimal component can be used.
 
<syntaxhighlight lang=apl>
      model←{
        ⎕pp←34                  ⍝ set to max as we are using strings, the execute and format primitives round the number to the ⎕pp value
        dotPos←⍸,'.'⍷⍕⍵        ⍝ convert num to string and get the position of the decimal point
        int←⍎(⍕⍵)↑⍨¯1+dotPos    ⍝ strip integer based on the decimal point
        int-(⍵<0)∧(~0∊⍴dotPos)  ⍝ Subtract 1 only when negative+non int component exists. eg: ¯123.32→¯124
    }
</syntaxhighlight>
 
Converting to the exponent/scientific notation (123E¯2) and then using the exponent and mantissa to strip the decimal points can be used.
 
Warning: However, the method present here has issues dealing with larger values due to the loss in precision because of the ⍎ operator.
 
<syntaxhighlight lang=apl>
      model←{
        fmt←{⎕FR≡1287:¯33⍕⍵ ⋄ ¯16⍕⍵}⍵
        (m e)←'E'(≠⊆⊢)fmt
        en←⍎e
        diff←-(⍵<0)∧('.'∊⍕⍵)
        en<0:diff+0
        m↑⍨←3+(⍵<0)+en
        diff+⍎m,'E',e
    }
</syntaxhighlight>
 
Other approaches could include writing a hungry loop to evaluate the closest integer value and evaluate from there.


=== Complex floor ===
=== Complex floor ===
Line 50: Line 87:
       1>|v-⌊v
       1>|v-⌊v
1 1 1 1
1 1 1 1
</source>{{Works in|[[Dyalog APL]]}}
</syntaxhighlight>{{Works in|[[Dyalog APL]]}}


== External links ==
== External links ==

Navigation menu