【Tanh的标量实现】

article/2025/11/10 5:06:30

cmath

文章目录

  • 计算机是如何实现tanh计算的
  • 一、tanh的一些基本内容
  • 二、代码
    • 1.我的实现例子
    • 2.代码中分段函数的实现原理
  • 补充


计算机是如何实现tanh计算的


一、tanh的一些基本内容

对于tanh函数有公式为 t a n h ( x ) = ( e x − e − x ) / ( e x + e − x ) tanh(x) = (e^{x} -e^{-x}) / (e^{x}+e^{-x}) tanh(x)=(exex)/(ex+ex)。其定义域为R,原因是分母利用不等式可得>=2,所以无限制条件。

其次需要知道tanh的泰勒展开式,为 t a n h ( x ) = ∑ n = 1 ∞ 2 2 n ( 2 n − 1 ) B 2 n x 2 n − 1 ( 2 n ! ) tanh(x) = \sum_{n=1}^{\infty} \frac {2^{2n} (2n-1)B_{2n}x^{2n-1}}{(2n!)} tanh(x)=n=1(2n!)22n(2n1)B2nx2n1
其中 B 2 n B_{2n} B2n是伯努利数。
其函数图像如下:
在这里插入图片描述一目了然,奇函数有$-tanh(x) = tanh(-x) $。因此我们只需要在正区间内讨论其值即可。

另外需要清楚这个导数公式,也可以证出其单调性,以及曲线趋于平直的点 [ t a n h ( x ) ] ′ = 1 − t a n h 2 ( x ) [{tanh(x)}]' = 1-tanh^{2}(x) [tanh(x)]=1tanh2(x)

二、代码

1.我的实现例子

代码如下(示例):

#include <bits/stdc++.h>using namespace std;float myexp(float x){return 1+x+x*x/2+x*x*x/6+x*x*x*x/24+x*x*x*x*x*x/120;
}float mytanh(float x){int ix = (*(int*)&x) & 0x7fffffff;  //去掉符号位 float t; //中间变量float z;  //最终结果if(ix >= 0x7f800000){if(x >= 0) return 1; //+Inf else return 1/x - 1;    //-Inf or NaN}if(ix < 0x41B00000){ //|x| < 22if(ix < 0x24000000){   //|x| < -55return x*(1+x);}if(ix >= 0x40000000){ //|x| >= 1t = myexp(2*ix)-1;z = 1 - 2/(t+2);}else{t = myexp(-2*ix)-1;z = -t/(t+2);}}else{return z = 1;   // |x| > 22  return +-1}return (x >= 0)? z : -z;
}int main(){float i = 5.123456;float m = mytanh(i);float n = tanh(i);float q = m - n;cout << "mytanh = " << m << "cmath's tanh " << n << endl;cout << q;return 0;}

2.代码中分段函数的实现原理

1、在 0 < = x < = 2 − 55 0 <= x <= 2^{-55} 0<=x<=255时,有 t a n h ( x ) = x ∗ ( 1 + x ) tanh(x) = x*(1+x) tanh(x)=x(1+x)
2、在 2 − 55 < x < = 1 2^{-55} < x <=1 255<x<=1时, 有 t a n h ( x ) = − t t + 2 tanh(x) = \frac{-t}{t+2} tanh(x)=t+2t 其中 t = e − 2 x − 1 t = e^{-2x}-1 t=e2x1
3、在 1 < = x < 22 1 <= x < 22 1<=x<22时,有 t a n h ( x ) = 1 − 2 t + 2 tanh(x) = 1 - \frac{2}{t+2} tanh(x)=1t+22 其中 t = e 2 x − 1 t = e^{2x}-1 t=e2x1
4、在 22 < x < i n f 22 < x < inf 22<x<inf时,有 t a n h ( x ) = 1 tanh(x) = 1 tanh(x)=1

下面对这四段函数进行具体解释:
对于第一段,是因为在x趋于一个很小的数值时近似有Tanh(x) = x,此时(1+x)约等于1,对于公式中逼近0的一段区间分子使用泰勒即为 2 x + 2 x 2 2x+2x^{2} 2x+2x2,分母就是2,所以可以直接得到x(1+x)这个式子。但是为什么是 2 − 55 2^{-55} 255这个值,还有待研究,但是确定的是这里使用一个较小的值即可

对于第二和第三段,对tanh(x)的公式进行通分化简即可得出结果,无误差。

对于第四段,便可以使用我们前边提到过的导数,令导数为0,也即求 t a n h ( x ) = 1 tanh(x) = 1 tanh(x)=1的x的值,在计算器中我们可以得到tanh(17) 约等于 0.9999999999999964。tanh(18)约等于1,因此找到了一个点,但是在glibc中其使用了22作为这个点,大于这个点的x代入tanh(x)中均会得到结果1。


补充

代码中使用了位运算的技巧,需要清楚ieee754浮点数标准后进行阅读。这篇只是对tanh标量的初步认知,后面重点是进行向量化计算。


http://chatgpt.dhexx.cn/article/p8A8ZM4u.shtml

相关文章

LeetCode-加一(Plus One解题思路)

题目&#xff1a; 给定一个由整数组成的非空数组所表示的非负整数&#xff0c;在该数的基础上加一。 最高位数字存放在数组的首位&#xff0c; 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外&#xff0c;这个整数不会以零开头。 来源&#xff1a;力扣&#xff…

学计算机的 1加1,如何用“一加一等于几”解析人生

一加一等于二。 这个亘古不变的结论&#xff0c;一直以来被人们用各种各样的推理来诠释成千变万化的结果&#xff0c;一加一等于二&#xff0c;不再是唯一的结论&#xff0c;而每一个延伸的结果都伴随着一个个的充满睿智的推理。一加一到底等于几呢&#xff1f;好像我们越来越迷…

一加一为什么等于二

中国数学家陈景润研究的“11”并非算术的11&#xff0c;许多人也误以为陈景润在研究11为什么等于2&#xff0c;算法是人类定义的&#xff0c;不需要研究。陈景润研究的“11”其实是哥德巴赫猜想的代名词。 数学上&#xff0c;非常有名的“&#xff08;11&#xff09;”&#x…

1分钟自动产出高质量PPT:ChatGPT + MidShow

你可能想知道如何在一分钟内自动产出高质量的PPT。有了ChatGPT和MindShow&#xff0c;这不再是一个难题。ChatGPT是一个基于OpenAI的强大的自然语言生成模型&#xff0c;它可以根据你的输入生成各种类型的文本&#xff0c;包括PPT提纲。MindShow是一个在线的PPT制作工具&#x…

ChatGPT AI 快速制作财务汇报PPT

在职场中从事财务工作汇报一般都包含以下内容&#xff1a; 收入报表&#xff1a;收入来源、金额、时间等。支出报表&#xff1a;支出项目、金额、时间等。现金流量表&#xff1a;描述企业现金流量的变动情况&#xff0c;包括现金流入、流出和净流量。利润和损失报表&#xff1…

牛津英语字典pdf下载_英语词典 | 5本图解词典,让你拥有英语思维,一图胜千言!...

本篇微信主要包括如下内容: 1、DK汉英双语图解字典(PDF版) 2、新牛津图解词典The New Oxford Picture Dictionary(PDF版) 3、Word by Word Picture Dictionary(PDF+MP3音频版) 4、朗文汉英中华文化图解词典(PDF版) 5、APP(五种语言图解词典,JPG版) 小库需要提醒各位同学: ①资…

chatgpt赋能python:Python诞生于1991年–一个值得庆祝的编程语言!

Python诞生于1991年 – 一个值得庆祝的编程语言&#xff01; Python作为一种非常流行的编程语言&#xff0c;已经成为许多技术公司和个人在各种领域的首选语言。 Python在最新的TIOBE编程语言排名中位列前三&#xff0c;这证明了其在编程世界的重要性。但是&#xff0c;Python…

中国天网系统有多牛叉?BBC 记者体验了一把

&#xff08;点击上方公众号&#xff0c;可快速关注&#xff09; 程序员的那些事&#xff08;iProgrammer&#xff09;整理 此前《南华早报》曾在 10 月份报道中国正在建造世界上最强大的面部识别系统&#xff0c;能在 3 秒内识别任何公民。系统的目标是以 90% 的精度匹配一个…

云服务器BBC销售渠道,云服务器bbc

云服务器bbc 内容精选 换一换 云耀云服务器与弹性云服务器的主要区别&#xff1a;云耀云服务器&#xff1a;云耀云服务器是可以快速搭建简单应用的新一代云服务器&#xff0c;云耀云服务器按已搭配的套餐售卖&#xff0c;适用于低负载应用场景&#xff0c;可以更加便捷、更加高…

GAN(生成对抗网络)有一本实战书出版了,了解下?

什么是GAN GAN是一类由两个同时训练的模型组成的机器学习技术&#xff1a;一个是生成器&#xff0c;训练其生成伪数据&#xff1b;另一个是鉴别器&#xff0c;训练其从真实数据中识别伪数据。 生成&#xff08;generative&#xff09;一词预示着模型的总目标——生成新数据。…

【BBC纪录片】无人驾驶汽车的黎明(观后总结)

【BBC纪录片】无人驾驶汽车的黎明&#xff08;观后总结&#xff09; 1 引言2 主要内容2.1 前景2.2 Level 1-52.3 影响 3 简评 基本信息 出处&#xff1a;BBC地平线纪录片 时间&#xff1a;2017年 英文名&#xff1a;Dawn of the Driverless Car 国内观看&#xff1a;网易公开课…

有什么软件可以测试你的英语,史上热门7款英语学习App测评,你还在盲目使用吗?...

如今英语学习App可谓是百花齐放&#xff0c;而我们的英语学习往往也需要这些软件的辅助。可是&#xff0c;英语软件那么多&#xff0c;到底哪款适合我&#xff1f;今天我就为大家带来史上热门的7款英语学习应用程序的测评&#xff0c;帮助你找到你的那一个真爱&#xff01; 背单…

手把手教会你使用Markdown【从入门到精通一篇就够了】

手把手教会你使用Markdown【从入门到精通一篇就够了】 前言一、Markdown是什么二、Markdown优点三、Markdown的基本语法3.1 标题3.2 字体3.3 换行3.4 引用3.5 链接3.6 图片3.7 列表3.8 分割线3.9 删除线3.10 下划线3.11 代码块3.12 表格3.13 脚注3.14 特殊符号 四、Markdown的高…

BBC与开源硬件Micro:bit

这年头&#xff0c;做新闻的都开始做硬件了&#xff0c;并且风靡全世界~ 是的&#xff0c;你猜的没错&#xff0c;这里的BBC指的就是英国广播公司(British Broad-casting Corporation, BBC), 几乎所有人第一次知道这个信息都很震惊&#xff0c;就像当下朋友告诉你&#xff0c;…

bbc新闻app Android,英语基础不好也可以看BBC新闻背单词

原标题&#xff1a;英语基础不好也可以看BBC新闻背单词 估计大家刚刚开始学英文的时候也跟我一样单纯。很积极地上了BBC新闻的网站&#xff0c;想的是可以边看新闻&#xff0c;边学英文&#xff0c;结果一开始看就蒙了&#xff0c;一句话都没听懂&#xff0c;就放弃了&#xff…

第一课:什么是树莓派

第一课&#xff1a;什么是树莓派 第二课&#xff1a;基于树莓派的10个经典项目 第三课&#xff1a;购买您的第一个树莓派 第四课&#xff1a;如何安装树莓派系统 第五课&#xff1a;树莓派C语言编程手册 第六课&#xff1a;树莓派led控制 第七课&#xff1a;树莓派按键控制 第八…

AI一分钟 | 美媒称中国导弹阵地遭美国AI技术快速识别,人工智能主播将亮相BBC节目

一分钟AI&#xff1a; 商汤科技计划赴美IPO&#xff0c;并将在美设立研发中心 美媒称中国导弹阵地遭美国AI技术"快速识别" 美图发布全球首款人工智能绘画机器人Andy 自拍秒变插画 谷歌云平台落地香港&#xff0c;明年将建亚太区第六个数据中心 平安科技与北大汇…

【URLOS应用开发基础】10分钟制作一个nginx静态网站环境应用

URLOS开发者功能已上线有一段时间了&#xff0c;目前通过部分开发者的使用体验来看&#xff0c;不得不说URLOS在服务器软件开发效率方面确实有着得天独厚的优势&#xff0c;凭借docker容器技术与其良好的应用生态环境&#xff0c;URLOS必将迅速成为软件开发者的新宠儿。 本篇内…

虚拟创业云|BBC幼儿英语启蒙动画视频《Yakka Dee》第一二三季全60集1080P英文字幕

BBC幼儿英语启蒙Yakka Dee亚克迪第一二三季全60集1080P英文字幕&#xff0c;需要的学习英语的童鞋们可以了解一下这个资源&#xff0c;是BBC推出的幼儿语言启蒙节目&#xff0c;每集五分钟&#xff0c;重点讲一个单词&#xff0c;鼓励小朋友开口说英文&#xff0c;YakkaDee是一…

虚拟创业云|BBC幼儿英语启蒙动画What’s the Big Idea雨果带你看世界英文版和中文版

虚拟创业云|BBC幼儿英语启蒙动画What’s the Big Idea雨果带你看世界英文版和中文版 BBC儿童频道第一部关于学龄前哲学的动画节目。 自2012年在BBC首播,已播出1季52集,每集5分钟,适合3-8岁的小朋友观看。 对的,您没看错!把“学龄前”和“哲学”这两个词放在一起本身就是…