OpenCL编程指南-5.2数学函数

news2024/12/28 19:47:28

数学函数

OpenCL C实现了C99规范中描述的数学函数。使用这些数学函数的应用程序需要在代码中包含math.h头文件。这些数学函数可以作为OpenCL内核的内置函数。

对于表5-2和表5-3中的数学函数,我们将使用泛型类型名gentype指示这些函数可以取float、float2、float3、float4、float8、float16作为参数类型,另外,如果支持双精度扩展,参数类型还可以是double、double2、double3、double4、double8、double16。另外使用泛型类型名gentypei 指示 int、int2、int3、int4、int8、int16数据类型。泛型类型名gentypef指示 float、float2、float3、float4、float8、float16数据类型。泛型类型名gentyped指示double、double2、double3、double4、double8、double16数据类型。
5-2 内置数学函数

gentype acos(gentype x)                  计算×的反余弦
gentype acosh(gentype x)                 计算×的反双曲余弦
gentype acospi(gentype x)                计算acos(x)/p
gentype asin(gentype x)                  计算×的反正弦
gentype asinh(gentype x)                 计算×的反双曲正弦
gentype asinpi(gentype x)                计算asin(x)/p
gentype atan(gentype y_over_x)           计算y_over_x的反正切
gentype atan2(gentype y, gentype x)      计算y/x的反正切
gentype atanh(gentype x)                 计算×的双曲反正切
gentype atanpi(gentype x)                计算atan(x)/p
gentype atan2pi(gentype y,gentype x)     计算atan2(y,c)/p
gentype cbrt(gentype x)                  计算x的立方根
gentype ceil(gentype x)                  使用正无穷舍人模式舍入为一个整数
gentype copysign(gentype x,gentype y)   返回×,改变其符号使之与y的符号一致
gentype cos(gentype x)                   计算×的余弦
gentype cosh(gentype x)                  计算×的双曲余弦
gentype coapi(gentype x)                 计算cos(px)
gentype erfc(gentype x)                  计算余补误差函数1.0 - erf(x)

gentype erf(gentype x)                   计算误差函数。
gentype exp(gentype x)                   计算×以e为底的指数
gentype exp2(gentype x)                  计算×以2为底的指数
gentype exp10(gentype x)                 计算×以10为底的指数
gentype expml(gentype x)                 计算e^x-1.0
gentype fabs(gentype x)                  计算一个浮点数的绝对值
gentype fdim(gentype x,gentype y)        如果x>y,返回x-y,如果×小于或等于y,则返回+0
gentype floor(gentype x)                 使用负无穷舍人模式舍入为一个整数

gentype fma(gentype a, gentype b, gentype c)   将c与a和b的无限精度乘积相加,返回求和结果的正确舍人浮点表示。
                                               不会对中间乘积结果进行舍入。
                                               边界行为遵循IEEE 754-2008标准

gentype fmax(gentype x, gentype y)              如果x < y,返回y;否则返回x。如果一个参数是NaN, fmax()会返回另一个参数。                                               
gentypef fmax(gentypef x, float y)              如果两个参数都是NaN,fmax()会返回NaN
gentyped fmax(gentyped x, double y)

gentype min(gentype x, gentype y)               如果y<x,返回y;否则返回x。
gentypef fmin(gentypef x, float y)              如果一个参数是NaN,fmin()会返回另一个参数。
gentyped fmin (gentyped x, double y)            如果两个参数都是NaN,fmin()会返回NaN

gentype fmod(gentype x, gentype y)              返回x -y * trunc(x/y)

gentype fract(gentype x, global gentype *iptr)  返回fmin(x - floor (x),0x1.fffffep - 1f)
gentype fract(gentype x, local gentype *iptr)   floor()在iptr中返回
gentype fract(gentype x, private gentype *iptr)

 
gentype frexp(gentype x, global intn *exp)     从×抽取尾数和指数。对于每个分量,返回的尾数是
gentype frexp(gentype x, local intn *exp)      一个浮点数,值为0或介于[1/2,1)之间。x的每个
gentype frexp(gentype x, private intn *exp)    分量等于所返回的尾数*2^exp

gentype hypot(gentype x,gentype y)            计算 x^2+y^2的平方根值(没有过分的上澄出或下隘出)
intn ilogb(gentype x)                         将x的指数作为整数值返回

gentype ldexp (gentype x,intn exp)            返回x*2^exp
gentype ldexp (gentype x,int exp)

gentype lgammna(gentype x)                        计算log gamma函数
gentype lgamma_r(gentype x, global intn *signp)
gentype lgamna_r(gentype x, local intn*signp)
gentype lganna_r(gentype x,private intn *signp)

gentype log(gentype x)                              计算×的自然对数
gentype log2 (gentype x)                            计算×的以2为底的对数
gentype log10 (gentype x)                           计算×的以10为底的对数
gentype log1p(gentype x)                            计算loge(1.0+ x)
gentype logb(gentype x)                             计算x的指数,这是loge|x|的整数部分

gentype mad(gentype a, gentype b, gentype c)        mad近似a*b+c。对于是否对a*b的乘积舍人以及如何舍入,
                                                    以及如何处理不正常的中间乘积结果,这些都未定义。
                                                    如果速度比精度更重要,就可以使用mad

gentype maxcmag(gentype x, gentype y)               如果|x|>|y|,返回×;如果|y|>|x|,返回y;否则为fmax(x, y)

gentype minmag(gentype x, gentype y)                如果|x|<|y|,返回x;如果|y|<|×|,返回y;否则为fmin(x,y)

gentype modf(gentype x, global gentype *iptr)       分解一个浮点数。modf 函数将参数×分解为整数部分
gentype modf(gentype x, local gentype *iptr)        和小数部分,它们与参数符号相同。整数部分存储在 
gentype modf(gentype x, private gentype *iptr)      iptr指向的对象中,小数部分则由函数返回

float nan(uint nancode)                             返回一个静默 NaN。nancode可能为返回的 NaN的有效位置
floatn nan(uintn nancode) 
double nan(uint nancode) 
doublen nan(uintn nancode)

gentype nextafter(gentype x, gentype y)         计算x之后(朝着y的方向)下一个可表示的单精度或双精度浮点值。
                                                因此,如果y小于x, nextafter会返回小于×的可表示的最大浮点数

gentype pow(gentype x, gentype y)               计算×的y次方
gentype pown(gentype x, intn y)                 计算x的y次方,y是一个整数
gentype powr(gentype x,gentype y)               计算×的y次方,x ≥ 0

gentype remainder(gentype x, gentype y)                      计算值r(r=x-n*y),其中n是最接近x/y准确值的整数。
                                                             如果最接近x/y的整数有两个,n取其中的偶数;
                                                             如果r为0,则与x符号相同

gentype remquo(gentype x, gentype y, global gentypei *quo)   计算值r(r =x-n*y),其中n是最接近×/y准确值的整数。
gentype remquo(gentype x, gentype y, local gentypei *quo)    如果最接近×/y的整数有两个,n取其中的偶数:
gentype remquo (gentype x, gentype y, private gentypei *quo) 如果r为0,则与×符号相同
                                                             这个值与remainder函数的返回值相同。
                                                             remquo还会计算x/y整数商的低7,这个值与x/y符号相同。
                                                             这个有符号值存储在quo指定的对象中


gentype rint(gentype x)                                      舍入为采用浮点格式的整数值〔使用就近舍入模式)
gentype rootn(gentype x,intn y)                              计算x的1/y次方
gentype round(gentype x)                                     返回最接近×的整数值(从0向外舍入),而不考虑当前的舍入方向
gentype rsqrt(gentype x)                                     计算x平方根的倒数
gentype sin(gentype x)                                       计算x的正弦

gentype sinoos lgentype x, global gentype *cosval)           计算×的正弦和余弦。计算得到的正弦值作为返回值,
gentype sinoos(gentype x, local gentype *cosval)             计算得到的余弦在cosval中返回
gentype sinoos(gentype x, private gentype *oosval)

gentype sinh(gentype x)                                      计算×的双曲正弦
gentype sinpi(gentype x)                                     计算sin(px)

gentype sqrt(gentype x)                                     计算×的平方根
gentype tan(gentype x)                                      计算x的正切
gentype tanh(gentype x)                                     计算×的双曲正切
gentype tanpi(gentype x)                                    计算tan(px)
gentype tganma(gentype x)                                   计算 gamma 函数
gentype trune(gentype x)                                    使用向0舍入模式舍入为整数

内置half_和native_数学函数

gentypef half_cos(gentypef x)                       计算×的余弦。x必须在-2^16 ~ +2^16内
gentypef half_divide(gentypef x, gentypef y)        计算x/y
gentypef half_exp(gentypef x)                       计算x以e为底的指数
gentypef half_exp2(gentypef x)                      计算x以2为底的指数
gentypef half_exp10(gentypef x)                     计算×以10为底的指数
gentypef half_1og(gentypef)                         计算×的自然对数
gentypef half_log2(gentypef x)                      计算x以2为底的对数
gentypef half_1og10 (gentypef x)                    计算x以10为底的对数
gentypef half powr(gentypef x, gentypef y)          计算x的y次方,其中x≥0
gentypef half_recip(gentypef x)                     计算x的倒数
gentypef half_rsqrt(gentypef x)                     计算x的平方根的倒数
gentypef half_sin(gentypef x)                       计算x的正弦。x必须在-2^16 ~ +2^16内
gentypef half_sqrt(gentypef x)                      计算×的平方根
gentypef half_tan (gentypef x)                      计算×的正切。x必须在-2^16 ~ +2^16内
gentypef native_cos(gentypef x)                     计算×的余弦,x的范围由实现定义。最大误差也由实现定义
gentypef native_divide(gentypef x,gentypef y)       计算×/y,参数范围由实现定义。最大误差也由实现定义
gentypef native_exp(gentypef x)                     计算×以e为底的指数,参数范围由实现定义。最大误差也由实现定义
gentypef native_exp2(gentypef x)                    计算×以2为底的指数,参数范固由实现定义。最大误差也由实现定义
gentypef native_exp10(gentypef x)                   计算×以10为底的指数,参数范由实现定义。最大误差也由实现定义
gentypef native_log(gentypef x)                     计算×的自然对数,参薮范围由实现定义。最大误差也由实现定义
gentypef native_1og2(gentypef x)                    计算×以2为底的对数,参数范围由实现定义。最大误差也由实现定义

gentypef native_1og10(gentypef x)                   计算x以10为底的对数,参数范围由实现定义。最大误差也由实现定义
gentypef native_recip(gentypef xe)                  计算×的倒数,参数范围由实现定义。最大误差也由实现定叉
gentypef native_rsqrt(gentypef x)                   计算×平方根的倒数,参数范围由实现定义。最大误差也由实现定义
gentypef native_sin(gentypef x)                     计算的正弦,参数范围由实现定义。最大误差也由实现定义
gentypef native_sqrt(gentypef x)                    计算×的平方根,参薮范围由实现定义。最大误差也由实现定义
gentypef native_tan(gentypef x)                     计算x的正切,参数范围由实现定义。最大误差也由实现定义

除了表5-2中所列的数学函数外,OpenCL C还为单精度浮点标量和矢量数据类型实现了另外两组最常用的数学函数。这些数学函数(见表5-3)是以精确性换取性能,为开发人员提供了选项以便做出适当的选择。这些数学函数可以划分为以下几类:
1)表5-2中带half_前缀的函数子集。这些函数实现的最小精度为10位,也就是说,ulp值≤8192 ulp。
2)表5-2中带native_前缀的函数子集。与不带native_前缀或带half_前缀的相应函数相比,这些函数通常有最佳性能。这些函数的精度(以及有些情况下的输入范围)由具体实现定义。
3)完成以下基本操作的half_和 native_函数:除法和倒数。

浮点常量

可用的常量见表5-4。有_F后缀的常量类型为float,在float类型的精度范围内是精确的。没有_F后缀的常量类型为double,在 double类型的精度范围内是精确的,只有当OpenCL实现支持双精度扩展时才可用。

M_E_F        e的值
M_E 

M_LOG2E_F    log₂e的值
M_LOG2E

M_LOG10E_F   lge的值
M_LOG10E

M_LN2_F      ln2的值
M_LN2

M_LN10_F     ln10的值
M_LN10

M_PI_F       π的值
M_PI

M_PI_2_F     π/2的值
M_PI_2

M_PI_4_F     π/4的值
M_PI_4

M_1_PI_F     1/π的值
M_1_PI 

M_2_PI_F     2/π的值
M_2_PI

M_2_SQRTPI_F   2/sqrt(π)的值
M_2_SQRTPI

M_SQRT2_F     sqrt(π)的值
M_SQRT2

M_SQRT1_2_F   1/sqrt(π)的值
M_SQRT1_2

相对误差作为ulp

表5-5给出了单精度和双精度浮点基本运算和函数的最大相对误差(定义为ulp,即最后一位的单位数)。ulp定义如下:

如果x是介于两个有限连续浮点数α和b之间的一个实数,但不等于α和b,那么ulp(x) = | b-a |;否则,ulp(x) 是最靠近x的两个不相等有限浮点数之间的距离。另外,ulp(NaN)为NaN。

基本运算和内置数学函数的ulp值
表5-5给出了单精度和双精度浮点基本运算和函数的最大相对误差(定义为ulp,即最后一位的单位数)。ulp定义如下:

如果x是介于两个有限连续浮点数a和b之间的一个实数,但不等于a和b,那么ulp(x)= |b-a|;否则,ulp(x)是最靠近x的两个不相等有限浮点数之间的距离。另外,ulp(NaN)为NaN。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下面的列表进一步澄清了ulp值和舍入模式行为:
1)就近舍入模式是完全简档的默认舍入模式。对于嵌入式简档,默认舍入模式可以是向0舍入或就近舍入。如果 CL_DEVICE_SINGLE_FP_CONFIG中支持CL_FP_ROUND_TO_NEAREST,则嵌入式简档支持就近舍入作为默认舍入模式;否则,默认舍入模式为向0舍入。
2)0 ulp用于不需要舍入的数学函数。
3)内置数学函数lgamma和 lgamma_r的ulp值目前未定义。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/682783.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AUTOSAR】CCP协议的代码分析与解读(二)----CCP协议格式和命令代码

CCP协议介绍 CCP的全称是CAN Calibration Protocol (CAN标定协议)&#xff0c;是基于CAN总线的ECU标定协议规范。CCP协议遵从CAN2.0通信规范&#xff0c;支持11位标准与29位扩展标识符。 CCP通信方式 CCP协议采用主从通信方式&#xff0c;如上图所示&#xff0c;其中从设备是…

Visual modflow Flex地下水数值模拟教程

详情点击链接&#xff1a;Visual modflow Flex地下水数值模拟及参数优化、抽水实验设计与处理、复杂的饱和/非饱和地下水流分析 一&#xff0c;地下水数值软件的操作流程、建模步骤和所需资料处理 [1] Visual MODFLOW Flex特征[2] Visual MODFLOW Flex软件界面及模块 [3] 地…

详细讲解接口自动化攻略

目录 前言&#xff1a; 为什么要做接口自动化 问题在哪里 全靠参数化 接口间参数传递 测试数据参数化 测试断言 测试管理 导入测试用例 接口执行顺序 使用测试数据集 测试参数配置 运行结果&测试报告 测试套件 前言&#xff1a; 接口自动化是提高测试效率和…

ThreadX在gcc下的移植

本文介绍ThreadX在arm-none-eabi-gcc编译器下的移植方法。 1、ThreadX介绍和源码获取 threadx的介绍和源码获取请参考之前的博文&#xff1a;ThreadX在mdk(AC5)中的移植。 2、准备工作 本篇主要介绍threadx在corex-m7上的移植&#xff0c;编译器使用arm-none-eabi-gcc。 在…

智能井盖传感器:以科技破解城市顽疾

在城市的道路网络中&#xff0c;井盖扮演着重要的角色&#xff0c;用于覆盖下方的管道和设施&#xff0c;然而&#xff0c;由于井盖的老化、损坏或被盗&#xff0c;常常会导致安全问题的发生&#xff0c;如路面塌陷、行人受伤等。井盖的状态监测和维护一直是城市管理者面临的挑…

2023年8月PMP考试,考生需要关注这些!

经PMI和中国国际人才交流基金会研究决定&#xff0c;中国大陆地区2023年第三期PMP认证考试定于8月19日举办。考生须认真阅读下文&#xff0c;知悉考试安排及注意事项&#xff0c;并遵守考试有关规定。 考生须认真阅读下文&#xff0c;知悉考试安排及注意事项&#xff0c;并遵守…

阿里推出了一个集成AI的数据库客户端,霸榜GitHub

背景 &#x1f4d6; 简介    Chat2DB 是一款有开源免费的多数据库客户端工具&#xff0c;支持windows、mac本地安装&#xff0c;也支持服务器端部署&#xff0c;web网页访问。和传统的数据库客户端软件Navicat、DBeaver 相比Chat2DB集成了AIGC的能力&#xff0c;能够将自然语…

基于vue的可拖拽设计的报表看板设计器

gitee上的不错项目&#xff0c;基于vue实现的可拖拽的看板设计器可以自由搭配颜色和图标&#xff0c;开发者可以只关注业务数据接口&#xff0c;前端不擅长的人员可以直接轻松上手。 1.可支持的元素 文字&#xff0c;边框&#xff0c;常见图表&#xff0c;柱形图&#xff0c;…

pgsql查询分页不对和属性转json的mapper映射

pgsql查询分页不对和属性转json的mapper映射 第一种&#xff1a; select * from xxx left join (selectarray_agg(jsonb_build_object(labelId,dl.label_id,labelName,dl.label_name)) as labelList,array_agg(dl.label_name) as labelNames,array_agg(dl.label_id) labelIdLi…

使用Python和Selenium自动化爬取 #【端午特别征文】 探索技术极致,未来因你出“粽” # 的投稿文章

文章目录 介绍&#xff1a;界面展示知识点详解导入相关模块设置Chrome驱动程序的路径创建ChromeDriver服务和启动Chrome浏览器发送GET请求获取网页内容模拟向下滚动加载更多内容获取完整的HTML内容关闭浏览器使用正则表达式提取文章信息构建数据表格和导出到Excel 扩展知识点代…

HTTP中的API是什么?

&#x1f482; 个人网站:【海拥】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 前言什么是API&#xf…

活动选择问题|贪婪算法-1

贪婪是一种算法范式&#xff0c;它一点一点地构建解决方案&#xff0c;总是选择下一个提供最明显和最直接好处的部分。贪婪算法用于优化问题。 如果优化问题具有以下属性&#xff0c;则可以使用贪婪解决该问题&#xff1a; 在每一步中&#xff0c;我们都可以做出一个目前看起来…

scrapy学习(scrapy项目学习)

创建scrapy项目 创建爬虫项目 scrapy startproject ss1_miove创建爬虫文件&#xff08;&#xff09; 命令格式&#xff1a;scrapy genspider <爬虫名称> <网站域名> scrapy genspider ss1_scrapy ssr1.scrape.centerscrapy框架的组成 spider文件夹&#xff1a…

ELK之Elasticsearch7.17.4安装(yum方式)和三节点集群配置

一、下载Elasticsearch7.17.4 的rpm包 下载地址&#xff1a; https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-17-4 二、建立elasticsearch的yum源 vim /etc/yum.repos.d/es.repo [elasticsearch] nameElasticsearch repository for 7.x packages bas…

IO多路复用之poll

文章目录 一&#xff1a;poll函数接口参数说明&#xff1a;返回结果&#xff1a; 二&#xff1a;poll的优缺点优点&#xff1a;缺点&#xff1a; 三&#xff1a;poll代码示例 一&#xff1a;poll函数接口 #include <poll.h> int poll(struct pollfd *fds, nfds_t nfds, i…

Java设计模式之行为型-模板方法模式(UML类图+案例分析)

目录 一、概念 二、角色设计 三、代码实现 案例一 案例二 四、总结 一、概念 定义一个操作中的算法骨架&#xff0c;而将算法的一些步骤延迟到子类当中&#xff0c;使得子类可以不改变该算法结构的情况下重定义该算法的特定步骤&#xff0c;即在一个抽象类中公开定义了执…

信驰达科技携手TI将CC2340推向更广市场领域

根据蓝牙技术联盟&#xff08;Bluetooth SIG&#xff09;2023年最新发布《2023年蓝牙市场最新资讯》&#xff0c;市调机构ABI Research预测数据显示&#xff0c;蓝牙市场在未来五年将会实现高增长&#xff0c;蓝牙设备年出货量将保持强劲增长势头&#xff0c;预计到2027年将达7…

python高频函数—CSV() 读写

Part.1 csv.reader()函数 csv.reader(csvfile, dialectexcel, **fmtparams) 返回一个 reader 对象&#xff0c;该对象将逐行遍历 csvfile。 一个简短的用法示例: >>> import csv>>> with open(eggs.csv, newline) as csvfile:... spamreader csv.r…

ctrl键的作用

crtl是control的英文缩写&#xff0c;是控制的意思&#xff0c;长和其他键组合起来使用&#xff0c;达到快捷操作的功能。 例如&#xff1a;ctrlX是剪切的功能&#xff0c;ctrlP是打印设置&#xff0c;ctrlZ是撤销&#xff0c;ctrlF是查找&#xff0c;ctrlY是恢复的功能等。 …

在野外使用无线电台的必知事项

电台属于无线通信设备的一种&#xff0c;主要用于发送和接收无线电信号&#xff0c;实现语音、数据和图像等信息的传输。它一般是由发射机和接收机两部分组成&#xff0c;能够在不同的频段和频率上进行通信。通过无线电波传输信息&#xff0c;为人们在不同场景中提供可靠的远距…