OpenCL学习笔记(16)--浮点型函数

1.OpenCL的浮点函数将会被划分为五类来分别讨论:算数运算和取舍,比较,指数运算,三角运算,以及其他类型的函数。

2。算术运算函数和取舍函数:大多数的数学函数都能计算乘积、商数以及余数,大多数取舍函数都能接受float型数,然后返回小数部分为0的float型数:
(1)floatn fabs(floatn x)–返回参数的绝对值,|x|;
(2)floatn fma(flaotn a,floatn b, floatn c)–返回ab+c,中间的乘法结果没有近似取舍;
(3)floatn fmod(floatn x,floatn y)–返回x模y的结果:x-(y
trunc(y/x));
(4)floatn mad(floatn a,floatn b,floatn c)–返回ab+c;
(5)float remainder(floatn x, floatn y)–返回x除以y的余数:x-n
y,其中x是最接近x/y的整数;
(6)float remquo(floatn x, floatn y, __(g|l|p)quo)–返回x除以y的余数:x-ny,其中n是最接近x/y的整数;同时也会计算x/y的低七位,结果的符号和x/y相同,被保存在quo指向的对象中;
(7)floatn rint(floatn x)–以float型返回最临近的整数–如果两个整数同样接近,以float型返回偶数;
(8)floatn round(floatn x)–返回最临近x 的整数,如果两个整数同样近,返回远离远点的整数;
(9)floatn ceil(floatn x)–返回x向上取整的结果;
(10)floatn floor(floatn x)-- 返回x向下取整的结果;
(11)floatn trunc(floatn x)–去掉x的小数部分,返回整数。

这张表中包含了两个功能相同的函数。函数mad和函数fma(Fused Multiply和Add, 先乘后加)的功能都是计算a*b+c.“mad在速度重于精度的场合下使用”。而与之相反,fma能提供更高的精度,它只对最后结果进行取舍,不对中间运算结果做任何处理。

运算符“/”既可以用于整数运算,也可以用于浮点数运算,但是操作符%(求余)只能用于整数运算。如果要对浮点数求余,则需要调用函数fmod,它将返回x-(ytrunc(y/x))的运算结果。函数remainder的功能相同,但返回的是x-ny的运算结果,其中n是最接近x/y的整数。

提到取舍函数,唯一需要记住的是:函数rint是向最近的偶数做取舍,而函数round则不然,它返回的是距离最近的整数,但如果两个最近的整数距离相同,它将返回离0最远的那个。
round(-6.5)返回的是-7.0而不是-6.0,这是因为-7比-6离0更远。可以将函数round与函数trunc对立起来理解记忆。

发布了19 篇原创文章 · 获赞 20 · 访问量 561

猜你喜欢

转载自blog.csdn.net/INFINALGEORGE/article/details/105200789