谁决定 bc 数学库将定义正弦余弦和反正切?

Mik*_*rce 8 reference history bc math

如果您加载bc 数学库,您将获得三角函数s()c()a()分别是正弦、余弦和反正切。为什么是这三个函数?

我知道为什么从数学角度是这三个:这是因为这三个是您需要在笛卡尔坐标和极坐标之间直接转换的三个。我是一名数学老师,不幸的是,这是我看到正弦/余弦/反正切被建立为原始三角函数集的唯一地方,所以我希望有人能在更历史的背景下告诉我为什么。Idk 在与数学教育工作者谈论为什么在切线之前向学生介绍反正切并不是一个亵渎神明的想法时,我最需要弹药。

ibu*_*fen 11

不是一个完整的答案,但也许有点有用。

更多在早期适应中使用三角函数的例子列表。也看看 UNIX 世界。


ALGOL

关于历史的有趣论文:

ALGOL 是在 1950 年代开发的。在 1958 年欧洲和美国计算机科学家的联席会议上,人们还获得了国际算法语言的初步报告,又名苏黎世报告。在那个时代,工作是统一符号以及如何为计算机编写算法。作为 58' 报告的摘录,以显示这方面的一些讨论

“指定函数的标识符,就像在变量的情况下一样,可以根据喜好选择。但是,某些标识符应保留用于分析的标准功能。

此保留列表应包含:

abs (E) 为表达式 E 的值的模数(绝对值)
符号 (E) 为 E 值的符号
整个 (E) 为不大于 E 值的最大整数
sqrt (E) 为 E 值的平方根
sin (E) 为 E 值的正弦
根据常用的数学符号,依此类推。”


从 ALGOL 58 得到了 ALGOL 60,也许可以说这项工作也更具体地说明了作为基础的内容(关于三角函数:

http://web.eecs.umich.edu/~bchandra/courses/papers/Naure_Algol60.pdf

算法语言报告 ALGOL 60

简而言之,建议sincosarctan作为标准功能。


算法

如果看一下在数字时代进行数学运算的装置,一台早期的机器是 Bendix G-15 计算机(1950 年代后期)。它使用受 ALGOL 58 影响的 ALGO。它有一个不属于 Algo 系统的库。库中的程序如下:, ,SIN,:COSARCTN

ALGO 库例程

  • ALGO 手册操作说明
  • 程序员参考手册(G15D - 旁注:有一些有趣的部分解释了各个方面,例如位、字节、字如何分组以及磁鼓作为 RAM 的使用)
  • 程序和子例程具有例如用于计算arcsinearccosine使用 的例程arctan(常规卡片的日期是 1957 年,所以不确定它是否是一些初步实验的一部分:?)

要使用这些例程是通过使用代码字加载的:

SIN    0101000
COS    0168000
ARCTN  0164000
Run Code Online (Sandbox Code Playgroud)

加载例如:

LIBRAry SIN{0101000}
Run Code Online (Sandbox Code Playgroud)

正如它所说

“可以将机器语言例程添加到库中。” ,但这三个是库中包含的。(它也使用十六进制表示十六进制 - 但这不是重点,但很有趣。)


UNIX

包含 UNIX版本 1bas,一种基本方言(由 Thompson 拥有)。它包括以下内建函数:argexplogsincosatnrndexprint

版本 2也有bas,另外还有一个子程序列表,其中列出了:atan, hypot, log, sin(sine / cosine)。它也与dc.

还有bc,但那是为了编译 B 程序。

另外值得一提的是:ttt(tick-tack-toe)、bj(black-jack)、moo(MOO的游戏)。

第 5 版。如果一个人想看看的源代码sin/cosatan等一个例如可以看看这个代码

  • 子程序: usr/source/s3/{atan.s,sin.s}
  • 基本内置: usr/source/s1/bas4.s

注意!例如 1972-stuff (s2) 中的档案具有绝对路径!


在 V7 中找到的 mathlib 被扩展为包括tan等。

还包括 Fortran77。


公元前

BC 在 1975 年重见天日,正如前面提到的,BC 还包括这三种基本方法。由 Robert Morris 和 Lorinda Cherry 开发。从/usr/doc/bc/bcV6 版本 (1975) 开始:

3.有一个数学函数库,可以通过在命令级别键入来获得

bc –l
Run Code Online (Sandbox Code Playgroud)

此命令将加载一组库函数,在撰写本文时,这些函数包括正弦(名为“s”)、余弦(“c”)、反正切(“a”)、自然对数(“l”)、指数(`e') 和整数阶贝塞尔函数 (`j(n,x)')。毫无疑问,更多的功能会及时添加。库将比例设置为 20。如果您愿意,可以将其重置为其他值。这些数学库例程的设计在别处讨论[4]

  • [4]Robert Morris,参考标准数学子程序库,

然而,那篇论文似乎很难找到。

因此,从列表中可以看出,基本的触发功能早在 V1 时就已成为系统的一部分。bc在加载例程中使用这些。


来自 Unix Heritage Wiki (cc) 的注释

罗伯特·莫里斯

Life with Unix 说:写 dc 并与 Lorinda Cherry 在一起。

一位研究 Unix 的读者说: 鲍勃 (罗伯特) 莫里斯介入了任何涉及数学的领域,无论是数值分析还是数论。Bob 发明了独特的原始实用程序typo, and dc- bc(与 Lorinda Cherry 一起),编写了大部分数学库,并编写了质数和因数(与 Thompson 一起)。他的一系列密码程序培养了中心对密码学的持续兴趣。

洛琳达·樱桃

Life with Unix 说:Writer's Workbench 的 Writer(措辞、风格等)、be 和 dc。写eqnbwk

一位研究 Unix 的读者说: Lorinda L. Cherry 与 Morris 在dc-bctypo. 一直对文本处理着迷的 Lorinda 发起eqn并发明了部分,这是一种近似解析器,在著名的 Writer's Workbench® ww6(v8) 中得到了利用。


艾略特 803

当然也不是说没有系统实现了更多功能,或者可能没有将这些作为核心功能。但那是历史......:P

艾略特 803 添加

艾略特 803 补充

arccos, arcsin, tan- 是, , 的补充sincosarctan


FORTRAN

  • 77 1977: sin, cos, tan, asin, acos, atan, ...

  • II 1958: SIN, COS, ATAN,TANH作为磁带库函数。

FORTRAN 1958


基本的

BASIC 1964年出生的有SINCOSTANATN

基本触发

基本手册 (1964)

根据@roaima 的评论。

家用计算机上使用的大多数 BASIC 方言(大约 1975 年以后)也有 SIN、COS、TAN、ATN(arctan)。没有其他的反转。我假设包含 TAN 是为了在使用 SIN/COS 时最小化误差范围,因为所有这些触发函数都是通过一个相当小的查找表生成的。

阿波罗11号

APOLLO 11 命令和月球模块源代码显示它们至少有一个子程序用于ARCTAN

你可以争辩说他们设法在没有子程序的情况下登陆月球TAN;)

科迪克

CORDIC(Volder 算法)在触发实现方面值得一提。


统计数据

@Stephen Kitt 的一个有趣的补充,来自评论:

另一篇有趣的论文是1973 年发表的关于计算机中心库中数学子程序使用的统计,这表明 1973 年初在普渡大学,sin / cos / atan 是最常用的三角函数,远远领先于 tan / asin / acos / tanh :

sin  / cos    39,462
atan          27,248

tan            4,707
asin / acos    4,139
tanh           2,546
Run Code Online (Sandbox Code Playgroud)

潜水

不是深入研究,但至少在这个主题上多一点。ALGOL 的论文可能是最符合标准的。

至于 BC ,Morris / Cherry 决定通过从库中加载选项来包含这些特定的基本功能,但没有找到直接引用-l


简而言之,这并不是人们不想要tan,而是历史表明,根据资源和用途,选择了哪些触发函数作为基础来实现。

  • FWIW 在家用计算机上使用的 [BASIC](https://en.m.wikipedia.org/wiki/BASIC#Syntax) 的大多数方言(大约 1975 年以后)也有 SIN、COS、TAN、ATN(arctan)。没有其他的反转。我假设包含 TAN 是为了在使用 SIN/COS 时最小化误差范围,因为所有这些触发函数都是通过一个相当小的查找表生成的 (3认同)
  • 另一篇有趣的论文是[*计算机中心库中数学子程序使用的统计*](https://doi.org/10.1145/1052646.1052648),发表于 1973 年,它表明,1973 年初在普渡大学,sin/ cos/atan 是最常用的三角函数,远远领先于 tan/asin/acos/tanh(sin/cos 为 39,462,atan 为 27,248,tan 为 4,707,asin/acos 为 4,139,tanh 为 2,546)。 (3认同)