固定小数点数の算術関数ライブラリ


固定小数点数の算術関数ライブラリ

固定小数点数のC言語による関数ライブラリを作成しました。32bitで,Q23,Q26,Q29フォーマットをサポートしてい ます。
math.h の関数の大部分
をサポートし,しかも,世界最高レベルの速度を実現しました。

関数ライブラリ                            q_math.c   ← q_math.c をq_math.h と変更して include して下さい
高速フーリエ変換のサンプル        sample.c

以下に、q_math.h で定義した関数及び関数形式マクロの一覧を示します。

注意 定義域,値域の値の範囲を超える演算結果は不定となります。





固定小数同士 の乗算・除算
23bit 26bit 29bit 概要 備考
q23_mul q26_mul q29_mul 固定小数同士の乗算(x*y)
q23_div q26_div q29_div 固定小数同士の除算(x/y)








平方根、立方 根関数
23bit 26bit 29bit 概要 備考
q23_sqrt q26_sqrt q29_sqrt 平方根
q23_cbrt q26_cbrt q29_cbrt 立方根
q23_hypot q26_hypot q29_hypot x の 2 乗と y の 2 乗の和の平方根








三角関数(ラ ジアン値)
23bit 26bit 29bit 概要 備考
q23_cos q26_cos q29_cos 余弦 (cos)
q23_sin q26_sin q29_sin 正弦 (sin)
q23_tan q26_tan
正接 (tan)
q23_sincos q26_sincos q29_sincos 余弦 と正弦を同時に求める sincos(x,*s,*c)
q23_acos q26_acos
逆余弦 (arccos)
q23_asin q26_asin
逆正弦 (arcsin)
q23_atan q26_atan q29_atan 逆正接 (arctan)
q23_atan2 q26_atan2 q29_atan2 y / x の逆正接 (arctan) atan2(y, x)








指数関数、対 数関数とべき乗関数
23bit 26bit 29bit 概要 備考
q23_exp q26_exp q29_exp 底がネイピア数eである指数関数 (exp)
q23_log q26_log q29_log 自然対数 (loge)
q23_log10 q26_log10
常用対数 (log10)
q23_log2 q26_log2
2 を底とする対数 (log2)
q23_pow q26_pow
べき乗 (x の y 乗)








双曲線関数と sigmoid関数
23bit 26bit 29bit 概要 備考
q23_cosh q26_cosh
双曲線余弦 (cosh)
q23_sinh q26_sinh
双曲線正弦 (sinh)
q23_tanh q26_tanh
双曲線正接 (tanh)
q23_acosh q26_acosh
双曲線逆余弦 (arccosh)
q23_asinh q26_asinh
双曲線逆正弦 (arcsinh)
q23_atanh q26_atanh
双曲線逆正接 (arctanh)
q23_sigmoid q26_sigmoid
シグモイド (sigmoid)








誤差関数とガ ンマ関数
23bit 26bit 29bit

q23_erf q26_erf
誤差関数
q23_erfc q26_erfc
余誤差関数
q23_lgamma q26_lgamma
ガンマ関数の自然対数
q23_tgamma q26_tgamma
ガンマ関数








最近接整数関 数
23bit 26bit 29bit 概要 備考
q23_ceil q26_ceil
天井関数 (ceiling function)
q23_floor q26_floor
床関数 (floor function)
q23_round q26_round
引数を四捨五入する
q23_trunc q26_trunc
小数点以下を0方向に切り捨てて整数値を返す








最大, 最小とその他の関数
23bit 26bit 29bit 概要 備考
q23_max q26_max
2 つの引数の最大値を返す
q23_min q26_min
2 つの引数の最小値を返す
q23_copysign q26_copysign
xの絶対値にyの符号を付加して返す
q23_dim q26_dim
x>yのときx-yを返し,x≦yのとき0を返す
q23_mod q26_mod
x / y の剰余を求める








固定小数と浮 動小数の変換(マクロ)
23bit 26bit 29bit 概要 備考
Q23_FROMF Q26_FROMF Q29_FROMF 浮動小数(float)を固定小数(long)に変換 Q1~Q31も定義済
Q23_TOF Q26_TOF Q29_TOF 固定小数(long)を浮動小数(float)に変換 Q1~Q31も定義済
Q23_FROMW Q26_FROMW Q29_FROMW 浮動小数(double)を固定小数(long)に変換 Q1~Q31も定義済
Q23_TOW Q26_TOW Q29_TOW 固定小数(long)を浮動小数(double)に変換 Q1~Q31も定義済
Q_FROMF(x,n) 浮動小数(float)をnビットの固定小数に変換 1≦n≦31
Q_TOF(x,n) nビットの固定小数を浮動小数(float)に変換 1≦n≦31
Q_FROMW(x,n) 浮動小数(double)をnビットの固定小数に変換 1≦n≦31
Q_TOW(x,n) nビットの固定小数を浮動小数(double)に変換 1≦n≦31








固定小数同士 の乗算・除算(マクロ)
23bit 26bit 29bit 概要 備考
Q23_MUL Q26_MUL Q29_MUL 固定小数同士の乗算(x*y) Q1~Q31も定義済
Q23_MUL_SH Q26_MUL_SH Q29_MUL_SH 途中結果がlongに収まる乗算(x*y) Q1~Q31も定義済
Q23_MUL_FR Q26_MUL_FR Q29_MUL_FR 乗算結果の小数部分を計算 Q1~Q31も定義済
Q23_DIV Q26_DIV Q29_DIV 固定小数同士の除算(x/y) Q1~Q31も定義済
Q23_PDIV Q26_PDIV Q29_PDIV 同符号固定小数同士の除算(x/y) Q1~Q31も定義済
Q_MUL(x,y,n) nビットの固定小数qn同士の乗算(x*y) 1≦n≦31
Q_MUL_SH(x,y,n) 途中結果がlongに収まる乗算(x*y) 1≦n≦31
Q_MUL_FR(x,y,n) 乗算結果の小数部分を計算 1≦n≦31
Q_DIV(x,y,n) nビットの固定小数qn同士の除算(x/y) 1≦n≦31
Q_PDIV(x,y,n) nビットの同符号固定小数qn同士の除算(x/y) 1≦n≦31

固定小数同士の加減算は、C言語の加減算(+,-)で行って下さい。
固定小数と整数の乗算は、C言語の乗算(*)で行って下さい。 固定小数を整数で割る除算は、C言語の除算(/)で行って下さい。
異なる型の固定小数点の間の変換は、C 言語のシフト演算で行って下さい。
例: Q23の数xから Q26の数yへの変換は y=x<<3;
例: Q26の数xから Q23の数yへの、四捨五入をしての変換は y=(x+4)>>3;

高次収束のニュートン法 Newton.pdf
ライブラリーの平方根の計算に使った,高次収束のニュートン法について解説しました。

最初のページに戻る