如果您加载BC数学图书馆你得到三角函数s()
和c()
,a()
它们分别是正弦、余弦和反正切。为什么有这三个功能呢?
我从数学角度知道为什么是这三个:因为这是您需要在笛卡尔坐标和极坐标之间直接转换的三个。我是一名数学老师,不幸的是,这是我见过的唯一将正弦/余弦/反正切建立为集合的地方原始三角函数,所以我希望有人能告诉我为什么在更历史的背景下。我不知道在与数学教育者谈论为什么在正切之前向学生介绍反正切不是亵渎的想法时,我最需要弹药。
答案1
不是完整的答案,但也许有点用。
更多在早期适应中使用三角函数的示例列表。还可以了解 UNIX 世界。
阿尔戈尔
关于历史的有趣论文:
ALGOL 开发于 1950 年代。 1958年,在欧洲和美国计算机科学家的联席会议上,人们还得到了国际算法语言初步报告又名《苏黎世报告》。当时的工作是统一符号以及如何为计算机编写算法。摘录自 58' 报告来展示一些讨论在这方面:
“正如变量的情况一样,指定函数的标识符可以根据喜好进行选择。然而,某些标识符应保留用于标准分析功能。
该保留列表应包含:
abs(E) 为表达式 E 的值的模(绝对值) 符号 (E) 表示 E 值的符号 整个(E)为不大于E值的最大整数 sqrt (E) 为 E 值的平方根 sin (E) 为 E 值的正弦根据常见的数学符号等等。”
从 ALGOL 58 到 ALGOL 60,也许可以说,这项工作对于作为基础的内容也更加具体(关于三角函数:
简而言之,它建议sin
、cos
和arctan
作为标准函数。
算法
如果看一下数字时代执行数学的装置,就会发现早期的一台机器是 Bendix G-15 计算机(1950 年代末)。它使用受 ALGOL 58 影响的 ALGO。它有一个不属于 Algo 系统的库。库中的例程如下SIN
、、、COS
:ARCTN
- 算法手册–操作说明
- 程序员参考手册(G15D - 旁注:有一些有趣的部分解释各个方面,例如位、字节、字如何分组以及使用磁鼓作为内存)
- 程序和子程序例如,具有用于计算
arcsine
和arccosine
使用的例程arctan
。(常规卡片的日期为 1957 年,所以不确定这是否是一些初步实验的一部分:?)
要使用这些例程,请使用代码字加载:
SIN 0101000
COS 0168000
ARCTN 0164000
加载例如:
LIBRAry SIN{0101000}
正如它所说
“可以将机器语言例程添加到库中。”,但这三个是库中包含的。(它也使用十六进制表示十六进制 - 但这不是重点,但很有趣。)
UNIX系统
版本1包括 UNIX 的bas
,basic 的一种方言(Thompson 所有)。它包括以下内置函数:arg
、exp
、log
、sin
、cos
、atn
、rnd
和expr
。int
版本2另外还可以bas
找到一个子例程列表,其中列出了其他子例程:atan
, hypot
, log
, sin
(sine / cosine)。它还与dc
.
还有bc
,不过那是编译B程序用的。
另外值得一提的是:ttt
(tick-tack-toe)、bj
(black-jack)、moo
(MOO 游戏)。
版本5。如果想查看 等的源代码sin/cos
,atan
可以例如看看这段代码:
- 子程序:
usr/source/s3/{atan.s,sin.s}
- 基本内置:
usr/source/s1/bas4.s
注意!例如 1972-stuff (s2) 中的档案有绝对路径!
V7 中的 mathlib 已扩展为包括tan
等。
还包括 Fortran77。
公元前
BC 早在 1975 年就出现了,正如前面提到的,它也包括这三种基本方法。由罗伯特·莫里斯和洛琳达·切里开发。从/usr/doc/bc/bc
V6 版本 (1975)开始:
3.有一个数学函数库,可以通过在命令级别键入来获得
bc –l
该命令将加载一组库函数,在编写本文时,这些函数包括正弦(名为“s”)、余弦(“c”)、反正切(“a”)、自然对数(“l”)、指数(`e') 和整数阶贝塞尔函数 (`j(n,x)')。毫无疑问,更多的功能将会及时添加。库将比例设置为 20。如果您愿意,可以将其重置为其他值。这些数学库例程的设计将在别处讨论
[4]
。
[4]
罗伯特·莫里斯,参考标准数学子程序库,
那张纸不过看起来很难找到。
因此,从清单来看,基本的三角函数早在 V1 就已经是系统的一部分。bc
在加载例程中使用了这些。
来自 Unix Heritage Wiki 的注释(抄送)
Life with Unix 说:写了 dc 并与 Lorinda Cherry 在一起。
一位研究 Unix 读者说: 鲍勃 (罗伯特) 莫里斯介入了所有涉及数学的领域,无论是数值分析还是数论。鲍勃发明了独特的原创实用程序typo
,并且dc
- bc
(与洛琳达·樱桃),编写了大部分数学库,并写出了素数和因数(与汤普森一起)。他的一系列密码项目培养了该中心对密码学的持续兴趣。
Life with Unix 说:作家工作台的作家(措辞、风格等)、be 和 dc。写eqn
与bwk
.
一位研究 Unix 读者说:Lorinda L. Cherry 与 Morris 合作开发了dc
-bc
和typo
。 Lorinda 始终对文本处理着迷,她发起eqn
并发明了部件,这是一种在著名的 Writer's Workbench®、ww6(v8) 中使用的近似解析器。
艾略特 803
当然,并不是没有实现更多功能的系统,或者可能没有这些作为核心功能。但这已经是历史了...:P
arccos
,arcsin
,tan
- 哪个是补充sin
, cos
,arctan
。
福尔坦语言
77 1977 :
sin
、、、、、、、……cos
tan
asin
acos
atan
II 1958:
SIN
,COS
,ATAN
,TANH
作为库磁带功能。
基本的
1964 年诞生的 BASIC 有SIN
, COS
,TAN
和 ATN
。
根据评论@roaima。
家用计算机上使用的大多数 BASIC 方言(大约 1975 年以后)也有 SIN、COS、TAN、ATN (arctan)。没有其他的逆。我假设包含 TAN 是为了最大限度地减少使用 SIN/COS 时的误差范围,因为所有这些三角函数都是通过相当小的查找表生成的。
阿波罗11号
这APOLLO 11 指令舱和登月舱的源代码表明他们至少有一个子程序ARCTAN
你可以说他们在没有子程序的情况下成功登陆月球TAN
;)
科迪克
CORDIC(Volder 算法)在三角函数实现方面值得注意的是。
统计数据
一个有趣的补充@斯蒂芬·基特,来自评论:
另一篇有趣的论文是计算机中心图书馆数学子程序使用情况统计,发表于 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
潜水
不是一个深潜,但至少在这个主题上多了一点。 ALGOL 的论文也许是最切题的。
至于BC则是没有找到直接报价Morris / Cherry 决定通过选项从库加载来包含这些特定的基本功能-l
。
简而言之,并不是一个人不想例如tan
,但历史显示根据资源和使用选择哪些三角函数作为基础来实现。