# S15.16 Fixed Point Numbers

32-bit, or more specifically S15.16 (15 bits before the decimal point, 16 bits after the decimal point, one bit for the sign, two's complement) fixed-point numbers are optionally supported by zeptoforth. They are not in any builds, but are available to be loaded by the user, both into RAM and into flash.

### `fixed32`

The `fixed32` module contains the following words:

##### `f32*`
( x y -- z )

Multiply two S15.16 fixed-point numbers

##### `f32/`
( x y -- z )

Divide an S15.16 fixed-point number by another

##### `f32>s`
( x -- y )

Convert an S15.16 fixed-point number to a 16-bit integer

##### `s>f32`
( x -- y )

Convert a 16-bit integer to an S15.16 fixed-point number

##### `f64>f32`
( D: x -- y )

Convert an S31.32 fixed-point number to an S15.16 fixed-point number

##### `f32>f64`
( x -- D: y )

Convert an S15.16 fixed-point number to an S31.32 fixed-point number

##### `f32mod`
( x y -- z )

Calculate the modulus of two S15.16 fixed-point numbers

##### `f32ceil`
( f -- n )

Get the ceiling of an S15.16 fixed-point number as a single-cell number.

##### `f32floor`
( f -- n )

Get the floor of an S15.16 fixed-point number as a single-cell number.

##### `f32round-half-up`
( f -- n )

Round an S15.16 fixed-point number up to the nearest integer with half rounding up.

##### `f32round-half-down`
( f -- n )

Round an S15.16 fixed-point number down to the nearest integer with half rounding down.

##### `f32round-half-zero`
( f -- n )

Round an S15.16 fixed-point number to the nearest integer with half rounding towards zero.

##### `f32round-half-away-zero`
( f -- n )

Round an S15.16 fixed-point number to the nearest integer with half rounding away from zero.

##### `f32round-half-even`
( f -- n )

Round an S15.16 fixed-point number to the nearest integer with half rounding towards even.

##### `f32round-half-odd`
( f -- n )

Round an S15.16 fixed-point number to the nearest integer with half rounding towards even.

##### `f32round-zero`
( f -- n )

Round an S15.16 fixed-point number towards zero.

##### `f32round-away-zero`
( f -- n )

Round an S15.16 fixed-point number away from zero.

##### `f32pi`
( -- pi )

Pi as a S15.16 fixed-point number

##### `f32sqrt`
( x -- y )

Get the square root of an S15.16 fixed-point number
  
##### `f32i**`
( f32 exponent -- f32' )

Exponentiate an S15.16 fixed-point number by an integer

##### `f32expm1`
( f32 -- f32' )

Get the (e^x)-1 of an S15.16 fixed-point number
  
##### `f32exp`
( f32 -- f32' )

Get the e^x of an S15.16 fixed-point number

##### `f32lnp1`
( f32 -- f32' )

Get the ln(x+1) of an S15.16 fixed-point number
  
##### `f32ln`
( f32 -- f32' )

Get the ln(x) of an S15.16 fixed-point number

##### `f32sin`
( f32 -- f32' )

Get the sine of an S15.16 fixed-point number
  
##### `f32cos`
( f32 -- f32' )

Get the cosine of an S15.16 fixed-point number

##### `f32tan`
( f32 -- f32' )

Get the tangent of an S15.16 fixed-point number

##### `f32atan`
( f32 -- f32' )

Get the arctangent of an S15.16 fixed-point number
  
##### `f32atan2`
( f32x f32y -- f32angle )

Get the angle of an x and an y S15.16 fixed-point numbers
  
##### `f32asin`
( f32 -- f32' )

Get the arcsine of an S15.16 fixed-point number
  
##### `f32acos`
( f32 -- f32' )

Get the arccosine of an S15.16 fixed-point number
  
##### `f32**`
( f32b f32x -- f32b^f32x )

Exponentiate two S15.16 fixed-point numbers

##### `f32sinh`
( f32 -- f32' )

Get the hyperbolic sine of an S15.16 fixed-point number
  
##### `f32cosh`
( f32 -- f32' )

Get the hyperbolic cosine of an S15.16 fixed-point number

##### `f32tanh`
( f32 -- f32' )

Get the hyperbolic tangent of an S15.16 fixed-point number

##### `f32asinh`
( f32 -- f32' )

Get the hyperbolic arcsine of an S15.16 fixed-point number

##### `f32acosh`
( f32 -- f32' )

Get the hyperbolic arccosine of an S15.16 fixed-point number

##### `f32atanh`
( f32 -- f32' )

Get the hyperbolic arctangent of an S15.16 fixed-point number

##### `parse-f32`
( c-addr bytes -- f32 success? )

Parse a 32-bit fixed-point number

##### `format-f32`
( c-addr f32 -- c-addr bytes )

Format an S15.16 number

##### `format-f32-truncate`
( c-addr f32 places -- c-addr bytes )

Format a S15,16 number truncated to *places* to the right of the decimal point
  
##### `(f32.)`
( f32 -- )

Type an s15.16 fixed-point number without a following space

##### `(f32.n)`
( f32 places -- )

Type a s15.16 fixed-point number truncated to *places* to the right of the decimal point without a following space

##### `f32.`
( f32 -- )

Type an s15.16 fixed-point number with a following space

##### `f32.n`
( f32 places -- )

Type a s15.16 fixed-point number truncated to *places* to the right of the decimal point with a following space
