1*5a38af1fSEdward Tomasz Napierala.\" 2*5a38af1fSEdward Tomasz Napierala.\" Copyright (c) 2018 Netflix, Inc. 3*5a38af1fSEdward Tomasz Napierala.\" All rights reserved. 4*5a38af1fSEdward Tomasz Napierala.\" 5*5a38af1fSEdward Tomasz Napierala.\" Redistribution and use in source and binary forms, with or without 6*5a38af1fSEdward Tomasz Napierala.\" modification, are permitted provided that the following conditions 7*5a38af1fSEdward Tomasz Napierala.\" are met: 8*5a38af1fSEdward Tomasz Napierala.\" 1. Redistributions of source code must retain the above copyright 9*5a38af1fSEdward Tomasz Napierala.\" notice, this list of conditions, and the following disclaimer, 10*5a38af1fSEdward Tomasz Napierala.\" without modification, immediately at the beginning of the file. 11*5a38af1fSEdward Tomasz Napierala.\" 2. The name of the author may not be used to endorse or promote products 12*5a38af1fSEdward Tomasz Napierala.\" derived from this software without specific prior written permission. 13*5a38af1fSEdward Tomasz Napierala.\" 14*5a38af1fSEdward Tomasz Napierala.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15*5a38af1fSEdward Tomasz Napierala.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16*5a38af1fSEdward Tomasz Napierala.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17*5a38af1fSEdward Tomasz Napierala.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR 18*5a38af1fSEdward Tomasz Napierala.\" ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19*5a38af1fSEdward Tomasz Napierala.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20*5a38af1fSEdward Tomasz Napierala.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21*5a38af1fSEdward Tomasz Napierala.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22*5a38af1fSEdward Tomasz Napierala.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23*5a38af1fSEdward Tomasz Napierala.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24*5a38af1fSEdward Tomasz Napierala.\" SUCH DAMAGE. 25*5a38af1fSEdward Tomasz Napierala.\" 26*5a38af1fSEdward Tomasz Napierala.\" $FreeBSD$ 27*5a38af1fSEdward Tomasz Napierala.\" 28*5a38af1fSEdward Tomasz Napierala.Dd July 8, 2018 29*5a38af1fSEdward Tomasz Napierala.Dt Q_INI 3 30*5a38af1fSEdward Tomasz Napierala.Os 31*5a38af1fSEdward Tomasz Napierala.Sh NAME 32*5a38af1fSEdward Tomasz Napierala.Nm Q_INI , 33*5a38af1fSEdward Tomasz Napierala.Nm Q_NCBITS , 34*5a38af1fSEdward Tomasz Napierala.Nm Q_BT , 35*5a38af1fSEdward Tomasz Napierala.Nm Q_TC , 36*5a38af1fSEdward Tomasz Napierala.Nm Q_NTBITS , 37*5a38af1fSEdward Tomasz Napierala.Nm Q_NFCBITS , 38*5a38af1fSEdward Tomasz Napierala.Nm Q_MAXNFBITS , 39*5a38af1fSEdward Tomasz Napierala.Nm Q_NFBITS , 40*5a38af1fSEdward Tomasz Napierala.Nm Q_NIBITS , 41*5a38af1fSEdward Tomasz Napierala.Nm Q_RPSHFT , 42*5a38af1fSEdward Tomasz Napierala.Nm Q_ABS , 43*5a38af1fSEdward Tomasz Napierala.Nm Q_MAXSTRLEN , 44*5a38af1fSEdward Tomasz Napierala.Nm Q_TOSTR , 45*5a38af1fSEdward Tomasz Napierala.Nm Q_SHL , 46*5a38af1fSEdward Tomasz Napierala.Nm Q_SHR , 47*5a38af1fSEdward Tomasz Napierala.Nm Q_DEBUG 48*5a38af1fSEdward Tomasz Napierala.Nd fixed-point math miscellaneous functions/variables 49*5a38af1fSEdward Tomasz Napierala.Sh SYNOPSIS 50*5a38af1fSEdward Tomasz Napierala.In sys/qmath.h 51*5a38af1fSEdward Tomasz Napierala.Ft QTYPE 52*5a38af1fSEdward Tomasz Napierala.Fn Q_INI "QTYPE *q" "ITYPE iv" "ITYPE dfv" "int rpshft" 53*5a38af1fSEdward Tomasz Napierala.Fd Q_NCBITS 54*5a38af1fSEdward Tomasz Napierala.Ft __typeof(q) 55*5a38af1fSEdward Tomasz Napierala.Fn Q_BT "QTYPE q" 56*5a38af1fSEdward Tomasz Napierala.Ft ITYPE 57*5a38af1fSEdward Tomasz Napierala.Fn Q_TC "QTYPE q" "ITYPE v" 58*5a38af1fSEdward Tomasz Napierala.Ft uint32_t 59*5a38af1fSEdward Tomasz Napierala.Fn Q_NTBITS "QTYPE q" 60*5a38af1fSEdward Tomasz Napierala.Ft uint32_t 61*5a38af1fSEdward Tomasz Napierala.Fn Q_NFCBITS "QTYPE q" 62*5a38af1fSEdward Tomasz Napierala.Ft uint32_t 63*5a38af1fSEdward Tomasz Napierala.Fn Q_MAXNFBITS "QTYPE q" 64*5a38af1fSEdward Tomasz Napierala.Ft uint32_t 65*5a38af1fSEdward Tomasz Napierala.Fn Q_NFBITS "QTYPE q" 66*5a38af1fSEdward Tomasz Napierala.Ft uint32_t 67*5a38af1fSEdward Tomasz Napierala.Fn Q_NIBITS "QTYPE q" 68*5a38af1fSEdward Tomasz Napierala.Ft uint32_t 69*5a38af1fSEdward Tomasz Napierala.Fn Q_RPSHFT "QTYPE q" 70*5a38af1fSEdward Tomasz Napierala.Ft NTYPE 71*5a38af1fSEdward Tomasz Napierala.Fn Q_ABS "NTYPE n" 72*5a38af1fSEdward Tomasz Napierala.Ft uint32_t 73*5a38af1fSEdward Tomasz Napierala.Fn Q_MAXSTRLEN "QTYPE q" "int base" 74*5a38af1fSEdward Tomasz Napierala.Ft char * 75*5a38af1fSEdward Tomasz Napierala.Fn Q_TOSTR "QTYPE q" "int prec" "int base" "char *s" "int slen" 76*5a38af1fSEdward Tomasz Napierala.Ft ITYPE 77*5a38af1fSEdward Tomasz Napierala.Fn Q_SHL "QTYPE q" "ITYPE iv" 78*5a38af1fSEdward Tomasz Napierala.Ft ITYPE 79*5a38af1fSEdward Tomasz Napierala.Fn Q_SHR "QTYPE q" "ITYPE iv" 80*5a38af1fSEdward Tomasz Napierala.Ft char *, ... 81*5a38af1fSEdward Tomasz Napierala.Fn Q_DEBUG "QTYPE q" "char *prefmt" "char *postfmt" "incfmt" 82*5a38af1fSEdward Tomasz Napierala.Ft ITYPE 83*5a38af1fSEdward Tomasz Napierala.Fn Q_DFV2BFV "ITYPE dfv" "int nfbits" 84*5a38af1fSEdward Tomasz Napierala.Sh DESCRIPTION 85*5a38af1fSEdward Tomasz Napierala.Fn Q_INI 86*5a38af1fSEdward Tomasz Napieralainitialises a Q number with the supplied integral value 87*5a38af1fSEdward Tomasz Napierala.Fa iv 88*5a38af1fSEdward Tomasz Napieralaand decimal fractional value 89*5a38af1fSEdward Tomasz Napierala.Fa dfv , 90*5a38af1fSEdward Tomasz Napieralawith appropriate control bits based on the requested radix shift point 91*5a38af1fSEdward Tomasz Napierala.Fa rpshft . 92*5a38af1fSEdward Tomasz Napierala.Fa dfv 93*5a38af1fSEdward Tomasz Napieralamust be passed as a preprocessor literal to preserve leading zeroes. 94*5a38af1fSEdward Tomasz Napierala.Pp 95*5a38af1fSEdward Tomasz NapieralaThe 96*5a38af1fSEdward Tomasz Napierala.Dv Q_NCBITS 97*5a38af1fSEdward Tomasz Napieraladefined constant specifies the number of reserved control bits, currently 3. 98*5a38af1fSEdward Tomasz Napierala.Pp 99*5a38af1fSEdward Tomasz Napierala.Fn Q_NTBITS , 100*5a38af1fSEdward Tomasz Napierala.Fn Q_NFCBITS , 101*5a38af1fSEdward Tomasz Napierala.Fn Q_MAXNFBITS , 102*5a38af1fSEdward Tomasz Napierala.Fn Q_NFBITS 103*5a38af1fSEdward Tomasz Napieralaand 104*5a38af1fSEdward Tomasz Napierala.Fn Q_NIBITS 105*5a38af1fSEdward Tomasz Napieralareturn the 106*5a38af1fSEdward Tomasz Napierala.Fa q Ns -specific 107*5a38af1fSEdward Tomasz Napieralacount of total, control-encoded fractional, maximum fractional, effective 108*5a38af1fSEdward Tomasz Napieralafractional, and integer bits applicable to 109*5a38af1fSEdward Tomasz Napierala.Fa q 110*5a38af1fSEdward Tomasz Napieralarespectively. 111*5a38af1fSEdward Tomasz Napierala.Pp 112*5a38af1fSEdward Tomasz Napierala.Fn Q_BT 113*5a38af1fSEdward Tomasz Napieralareturns the C data type of 114*5a38af1fSEdward Tomasz Napierala.Fa q , 115*5a38af1fSEdward Tomasz Napieralawhile 116*5a38af1fSEdward Tomasz Napierala.Fn Q_TC 117*5a38af1fSEdward Tomasz Napieralareturns 118*5a38af1fSEdward Tomasz Napierala.Fa v 119*5a38af1fSEdward Tomasz Napieralatype casted to the C data type of 120*5a38af1fSEdward Tomasz Napierala.Fa q . 121*5a38af1fSEdward Tomasz Napierala.Pp 122*5a38af1fSEdward Tomasz Napierala.Fn Q_RPSHFT 123*5a38af1fSEdward Tomasz Napieralareturns the bit position of 124*5a38af1fSEdward Tomasz Napierala.Fa q Ap s 125*5a38af1fSEdward Tomasz Napieralabinary radix point relative to bit zero. 126*5a38af1fSEdward Tomasz Napierala.Pp 127*5a38af1fSEdward Tomasz Napierala.Fn Q_ABS 128*5a38af1fSEdward Tomasz Napieralareturns the absolute value of any standard numeric type 129*5a38af1fSEdward Tomasz Napierala.Pq that uses the MSB as a sign bit, but not Q numbers 130*5a38af1fSEdward Tomasz Napieralapassed in as 131*5a38af1fSEdward Tomasz Napierala.Fa n . 132*5a38af1fSEdward Tomasz NapieralaThe function is signed/unsigned type safe. 133*5a38af1fSEdward Tomasz Napierala.Pp 134*5a38af1fSEdward Tomasz Napierala.Fn Q_SHL 135*5a38af1fSEdward Tomasz Napieralaand 136*5a38af1fSEdward Tomasz Napierala.Fn Q_SHR 137*5a38af1fSEdward Tomasz Napieralareturn the integral value 138*5a38af1fSEdward Tomasz Napierala.Fa v 139*5a38af1fSEdward Tomasz Napieralaleft or right shifted by the appropriate amount for 140*5a38af1fSEdward Tomasz Napierala.Fa q . 141*5a38af1fSEdward Tomasz Napierala.Pp 142*5a38af1fSEdward Tomasz Napierala.Fn Q_MAXSTRLEN 143*5a38af1fSEdward Tomasz Napieralacalculates the maximum number of characters that may be required to render the 144*5a38af1fSEdward Tomasz NapieralaC-string representation of 145*5a38af1fSEdward Tomasz Napierala.Fa q 146*5a38af1fSEdward Tomasz Napieralawith numeric base 147*5a38af1fSEdward Tomasz Napierala.Fa base . 148*5a38af1fSEdward Tomasz Napierala.Pp 149*5a38af1fSEdward Tomasz Napierala.Fn Q_TOSTR 150*5a38af1fSEdward Tomasz Napieralarenders the C-string representation of 151*5a38af1fSEdward Tomasz Napierala.Fa q 152*5a38af1fSEdward Tomasz Napieralawith numeric base 153*5a38af1fSEdward Tomasz Napierala.Fa base 154*5a38af1fSEdward Tomasz Napieralaand fractional precision 155*5a38af1fSEdward Tomasz Napierala.Fa prec 156*5a38af1fSEdward Tomasz Napieralainto 157*5a38af1fSEdward Tomasz Napierala.Fa s 158*5a38af1fSEdward Tomasz Napieralawhich has an available capacity of 159*5a38af1fSEdward Tomasz Napierala.Fa slen 160*5a38af1fSEdward Tomasz Napieralacharacters. 161*5a38af1fSEdward Tomasz Napierala.Fa base 162*5a38af1fSEdward Tomasz Napieralamust be in range 163*5a38af1fSEdward Tomasz Napierala.Bq 2,16 . 164*5a38af1fSEdward Tomasz NapieralaSpecifying 165*5a38af1fSEdward Tomasz Napierala.Fa prec 166*5a38af1fSEdward Tomasz Napieralaas -1 renders the number's fractional component with maximum precision. 167*5a38af1fSEdward Tomasz NapieralaIf 168*5a38af1fSEdward Tomasz Napierala.Fa slen 169*5a38af1fSEdward Tomasz Napieralais greater than zero but insufficient to hold the complete C-string, the '\\0' 170*5a38af1fSEdward Tomasz NapieralaC-string terminator will be written to 171*5a38af1fSEdward Tomasz Napierala.Fa *s , 172*5a38af1fSEdward Tomasz Napieralathereby returning a zero length C-string. 173*5a38af1fSEdward Tomasz Napierala.Pp 174*5a38af1fSEdward Tomasz Napierala.Fn Q_DEBUG 175*5a38af1fSEdward Tomasz Napieralareturns a format string and associated data suitable for printf-like rendering 176*5a38af1fSEdward Tomasz Napieralaof debugging information pertaining to 177*5a38af1fSEdward Tomasz Napierala.Fa q . 178*5a38af1fSEdward Tomasz NapieralaIf either 179*5a38af1fSEdward Tomasz Napierala.Fa prefmt 180*5a38af1fSEdward Tomasz Napieralaand/or 181*5a38af1fSEdward Tomasz Napierala.Fa postfmt 182*5a38af1fSEdward Tomasz Napieralaare specified, they are prepended and appended to the resulting format string 183*5a38af1fSEdward Tomasz Napieralarespectively. 184*5a38af1fSEdward Tomasz NapieralaThe 185*5a38af1fSEdward Tomasz Napierala.Fa incfmt 186*5a38af1fSEdward Tomasz Napieralaboolean specifies whether to include 187*5a38af1fSEdward Tomasz Napierala.Pq Vt true 188*5a38af1fSEdward Tomasz Napieralaor exclude 189*5a38af1fSEdward Tomasz Napierala.Pq Vt false 190*5a38af1fSEdward Tomasz Napieralathe raw format string itself in the debugging output. 191*5a38af1fSEdward Tomasz Napierala.Pp 192*5a38af1fSEdward Tomasz Napierala.Fn Q_DFV2BFV 193*5a38af1fSEdward Tomasz Napieralaconverts decimal fractional value 194*5a38af1fSEdward Tomasz Napierala.Fa dfv 195*5a38af1fSEdward Tomasz Napieralato its binary-encoded representation with 196*5a38af1fSEdward Tomasz Napierala.Fa nfbits 197*5a38af1fSEdward Tomasz Napieralaof binary precision. 198*5a38af1fSEdward Tomasz Napierala.Fa dfv 199*5a38af1fSEdward Tomasz Napieralamust be passed as a preprocessor literal to preserve leading zeroes. 200*5a38af1fSEdward Tomasz NapieralaThe returned value can be used to set a Q number's fractional bits, for example 201*5a38af1fSEdward Tomasz Napieralausing 202*5a38af1fSEdward Tomasz Napierala.Fn Q_SFVAL . 203*5a38af1fSEdward Tomasz Napierala.Pp 204*5a38af1fSEdward Tomasz NapieralaAll of those functions operate on 205*5a38af1fSEdward Tomasz Napieralathe following data types: 206*5a38af1fSEdward Tomasz Napierala.Vt s8q_t , 207*5a38af1fSEdward Tomasz Napierala.Vt u8q_t , 208*5a38af1fSEdward Tomasz Napierala.Vt s16q_t , 209*5a38af1fSEdward Tomasz Napierala.Vt u16q_t , 210*5a38af1fSEdward Tomasz Napierala.Vt s32q_t , 211*5a38af1fSEdward Tomasz Napierala.Vt u32q_t , 212*5a38af1fSEdward Tomasz Napierala.Vt s64q_t , 213*5a38af1fSEdward Tomasz Napieralaand 214*5a38af1fSEdward Tomasz Napierala.Vt u64q_t , 215*5a38af1fSEdward Tomasz Napieralawhich are referred to generically as 216*5a38af1fSEdward Tomasz Napierala.Fa QTYPE . 217*5a38af1fSEdward Tomasz NapieralaThe 218*5a38af1fSEdward Tomasz Napierala.Fa ITYPE 219*5a38af1fSEdward Tomasz Napieralarefers to the 220*5a38af1fSEdward Tomasz Napierala.Xr stdint 7 221*5a38af1fSEdward Tomasz Napieralainteger types. 222*5a38af1fSEdward Tomasz Napierala.Fa NTYPE 223*5a38af1fSEdward Tomasz Napieralais used to refer to any numeric type and is therefore a superset of 224*5a38af1fSEdward Tomasz Napierala.Fa QTYPE 225*5a38af1fSEdward Tomasz Napieralaand 226*5a38af1fSEdward Tomasz Napierala.Fa ITYPE . 227*5a38af1fSEdward Tomasz Napierala.Pp 228*5a38af1fSEdward Tomasz NapieralaFor more details, see 229*5a38af1fSEdward Tomasz Napierala.Xr qmath 3 . 230*5a38af1fSEdward Tomasz Napierala.Sh RETURN VALUES 231*5a38af1fSEdward Tomasz Napierala.Fn Q_INI 232*5a38af1fSEdward Tomasz Napieralareturns the initialised Q number which can be used to chain initialise 233*5a38af1fSEdward Tomasz Napieralaadditional Q numbers. 234*5a38af1fSEdward Tomasz Napierala.Pp 235*5a38af1fSEdward Tomasz Napierala.Fn Q_TOSTR 236*5a38af1fSEdward Tomasz Napieralareturns a pointer to the '\\0' C-string terminator appended to 237*5a38af1fSEdward Tomasz Napierala.Fa s 238*5a38af1fSEdward Tomasz Napieralaafter the rendered numeric data, or NULL on buffer overflow. 239*5a38af1fSEdward Tomasz Napierala.Pp 240*5a38af1fSEdward Tomasz Napierala.Fn Q_DFV2BFV 241*5a38af1fSEdward Tomasz Napieralareturns the binary-encoded representation of decimal fractional value 242*5a38af1fSEdward Tomasz Napierala.Fa dfv 243*5a38af1fSEdward Tomasz Napieralawith 244*5a38af1fSEdward Tomasz Napierala.Fa nfbits 245*5a38af1fSEdward Tomasz Napieralaof binary precision. 246*5a38af1fSEdward Tomasz Napierala.Sh SEE ALSO 247*5a38af1fSEdward Tomasz Napierala.Xr errno 2 , 248*5a38af1fSEdward Tomasz Napierala.Xr qmath 3 , 249*5a38af1fSEdward Tomasz Napierala.Xr stdint 7 250*5a38af1fSEdward Tomasz Napierala.Sh HISTORY 251*5a38af1fSEdward Tomasz NapieralaThe 252*5a38af1fSEdward Tomasz Napierala.Xr qmath 3 253*5a38af1fSEdward Tomasz Napieralafunctions first appeared in 254*5a38af1fSEdward Tomasz Napierala.Fx 13.0 . 255*5a38af1fSEdward Tomasz Napierala.Sh AUTHORS 256*5a38af1fSEdward Tomasz Napierala.An -nosplit 257*5a38af1fSEdward Tomasz NapieralaThe 258*5a38af1fSEdward Tomasz Napierala.Xr qmath 3 259*5a38af1fSEdward Tomasz Napieralafunctions and this manual page were written by 260*5a38af1fSEdward Tomasz Napierala.An Lawrence Stewart Aq Mt lstewart@FreeBSD.org 261*5a38af1fSEdward Tomasz Napieralaand sponsored by Netflix, Inc. 262