GCC Libquadmath库介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yexiangCSDN/article/details/83059273

本手册介绍了libquadmath的使用,即GCC Quad-Precision数学库应用程序编程接口(API)

1 Typedef和常量
以下数据类型已通过typedef定义。
__complex128:基于__float128的复数
定义了以下宏,它们给出了__float128数据的数字限制
类型。
FLT128_MAX:最大的fnite数
FLT128_MIN:具有全精度的最小正数
FLT128_EPSILON:介于1和下一个较大的区域之间
可表示的数字
FLT128_DENORM_MIN:最小的正非规范化数
FLT128_MANT_DIG:尾数中的位数(位精度)
FLT128_MIN_EXP:最大负指数
FLT128_MAX_EXP:最大正指数
FLT128_DIG:尾数中的小数位数
FLT128_MIN_10_EXP:最大负小数指数
FLT128_MAX_10_EXP:最大正十进制指数
定义了以下__float128类型的数学常量。
M_Eq:常数e(欧拉数)
M_LOG2Eq:2的二进制对数
M_LOG10Eq:常用,十进制对数为2
M_LN2q:2的自然对数
M_LN10q:10的自然对数
M_PIq:pi
M_PI_2q:pi除以2
M_PI_4q:pi除以4
M_1_PIq:一个超过pi
M_2_PIq:一个超过两个pi
M_2_SQRTPIq:两个超过pi的平方根
M_SQRT2q:平方根2
M_SQRT1_2q:一个超过2的平方根

可以使用以下数学函数:
acosq:反余弦函数
acoshq:反双曲余弦函数
asinq:arc sine函数
asinhq:反双曲正弦函数
atanq:反正切函数
atanhq:反双曲正切函数
atan2q:反正切函数
cbrtq:立方根函数
ceilq:上限值函数
copysignq:复制数字的标志
coshq:双曲余弦函数
cosq:余弦函数
erfq:错误功能
erfcq:互补错误功能
expq:指数函数
expm1q:指数减1函数

fabsq:绝对值函数
fdimq:正面差异函数
finiteq:检查价值的有限性
floorq:价值函数
fmaq:融合乘法和加法
fmaxq:确定两个值的最大值
fminq:确定最少两个值
fmodq:余数值函数
frexpq:提取尾数和指数
hypotq:Eucledian距离函数
ilogbq:得到值的指数
isinfq:检查infnity
isnanq:检查不是数字
j0q:第一种贝塞尔函数,第一阶
j1q:第一种贝塞尔函数,二阶
jnq:第一类,第n级的贝塞尔函数
ldexpq:加载指数的值
lgammaq:对数伽玛函数
llrintq:舍入到最接近的整数值
llroundq:从零开始舍入到最接近的整数值
logbq:得到值的指数
logq:自然对数函数
log10q:基数10对数函数
log1pq:计算值的自然对数加1
log2q:base 2对数函数

lrintq:舍入到最接近的整数值
lroundq:从零开始舍入到最接近的整数值
modfq:分解浮点数
nanq:回归安静的NaN
nearbyintq:舍入到最接近的整数
nextafterq:下一个可表示的浮点数
powq:电源功能
remainderq:余数函数
remquoq:余数和商的一部分
rintq:舍入到最接近的整数值
roundq:舍入到最接近的整数值,返回__float128
scalblnq:使用FLT_RADIX计算指数
scalbnq:使用FLT_RADIX计算指数
signbitq:返回符号位
sincosq:同时计算正弦和余弦
sinhq:双曲正弦函数
sinq:正弦函数
sqrtq:平方根函数
tanq:正切函数
tanhq:双曲正切函数
tgammaq:真正的伽玛函数
truncq:舍入为整数,朝向零
y0q:第二种贝塞尔函数,第一种
y1q:第二种贝塞尔函数,二阶
ynq:第二种贝塞尔函数,第n阶
cabsq复数绝对值函数
cargq:计算参数
cimagq虚数的复数
crealq:复数的真实部分
cacoshq:复弧双曲余弦函数
cacosq:复杂的余弦函数
casinhq:复杂的弧双曲正弦函数
casinq:复杂的正弦函数
catanhq:复圆弧双曲正切函数
catanq:复杂的反正切函数
ccosq复合余弦函数:
ccoshq:复杂的双曲余弦函数
cexpq:复指数函数
cexpiq:计算“i”乘以a的指数函数真正的价值

clogq:复杂的自然对数
clog10q:复数碱基10对数
conjq:复共轭函数
cpowq:复杂的电源功能
cprojq:项目进入Riemann Sphere
csinq:复杂的正弦函数
csinhq:复杂的双曲正弦函数
csqrtq:复数平方根
ctanq:复杂的切线函数
ctanhq:复双曲正切函数

3.1

strtoflt128 — Convert from string
The function strtoflt128 converts a string into a __float128 number.
Syntax __float128 strtoflt128 (const char *s, char **sp)

Example
#include <quadmath.h>
int main ()
{
__float128 r;
r = strtoflt128 ("1.2345678", NULL);
return 0;
}



3.2

quadmath_snprintf — Convert to string
The function quadmath_snprintf converts a __float128 floating-point number into a
string. It is a specialized alternative to snprintf, where the format string is restricted
to a single conversion specifer with Q modifer and conversion specifer e, E, f, F, g, G, a or
A, with no extra characters before or after the conversion specifer. The %m$ or *m$ style
must not be used in the format.
Syntax int quadmath_snprintf (char *s, size_t size, const char *format,
...)
Arguments:
s output string
size byte size of the string, including tailing NUL
format conversion specifer string
Note On some targets when supported by the C library hooks are installed for printf
family of functions, so that printf ("%Qe", 1.2Q); etc. works too.
Example
#include <quadmath.h>
#include <stdlib.h>
#include <stdio.h>
int main ()
{
__float128 r;
int prec = 20;
10 GCC libquadmath
int width = 46;
char buf[128];
r = 2.0q;
r = sqrtq (r);
int n = quadmath_snprintf (buf, sizeof buf, "%+-#*.20Qe", width, r);
if ((size_t) n < sizeof buf)
printf ("%s\n", buf);
/* Prints: +1.41421356237309504880e+00 */
quadmath_snprintf (buf, sizeof buf, "%Qa", r);
if ((size_t) n < sizeof buf)
printf ("%s\n", buf);
/* Prints: 0x1.6a09e667f3bcc908b2fb1366ea96p+0 */
n = quadmath_snprintf (NULL, 0, "%+-#46.*Qe", prec, r);
if (n > -1)
{
char *str = malloc (n + 1);
if (str)
{
quadmath_snprintf (str, n + 1, "%+-#46.*Qe", prec, r);
printf ("%s\n", str);
/* Prints: +1.41421356237309504880e+00 */
}
free (str);
}
return 0;
}

猜你喜欢

转载自blog.csdn.net/yexiangCSDN/article/details/83059273
gcc