History

誰決定 bc 數學庫將定義正餘弦和反正切?

  • June 6, 2021

如果您載入bc 數學庫,您將獲得三角函式s()c()並且a()分別是正弦、餘弦和反正切。為什麼是這三個功能?

我從數學的角度知道為什麼是這三個:因為這三個是您需要在笛卡爾座標和極座標之間直接轉換的三個。我是一名數學老師,不幸的是,這是我唯一看到正弦/餘弦/反正切建立為一組原始三角函式的地方,所以我希望有人能在更歷史的背景下告訴我*原因。*Idk 在與數學教育者談論為什麼在切線之前向學生介紹反正切並不是一個褻瀆神明的想法時,我最需要彈藥。

不是一個完整的答案,但也許有點用。

更多在早期適應中使用三角函式的範例列表。還可以看看 UNIX 世界。


算法

關於歷史的有趣論文:

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 的報告

簡而言之,它建議sin,cosarctan作為標準功能。


某物

如果看一下在數字時代執行數學的裝置,一台早期的機器是 Bendix G-15 電腦(1950 年代後期)。它使用受 ALGOL 58 影響的 ALGO。它有一個不屬於 Algo 系統的庫。庫中的常式如下,SIN, COS, ARCTN:

ALGO 庫常式

  • ALGO 手冊操作說明
  • 程序員參考手冊(G15D - 旁注:有一些有趣的部分解釋了各個方面,例如位、字節、字的分組方式以及磁鼓作為 RAM 的使用)
  • *程序和子常式*具有例如用於計算arcsinearccosine使用的arctan。(正常卡片的日期是 1957 年,所以不確定它是否是一些初步實驗的一部分:?)

要使用這些常式是通過使用程式碼字載入的:

SIN    0101000
COS    0168000
ARCTN  0164000

載入例如:

LIBRAry SIN{0101000}

正如它所說

“可以將機器語言常式添加到庫中。” ,但是這三個是庫中包含的。(它也使用十六進製表示十六進制 - 但這不是重點,但很有趣。)


UNIX

UNIX版本 1包括*bas*基本方言(由 Thompson 擁有)。它包括以下內置函式:arg, exp, log, sin, cos, atn, rnd,exprint.

版本 2還具有bas並另外找到一個子常式列表,其中列出了:atan, hypot, log, sin(正弦 / 餘弦)。它還與dc.

也有bc,但那是用來編譯B程序的。

另外值得一提的是:ttt(tick-tack-toe)、bj(black-jack)、moo(the game of 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 年就看到了曙光,並且如前所述,還包括這三種基本方法。由 Robert Morris 和 Lorinda Cherry 開發。從/usr/doc/bc/bcV6 版本(1975 年)開始:

*3.*有一個數學函式庫,可以通過在命令級別鍵入來獲得

bc –l

該命令將載入一組庫函式,在撰寫本文時,這些函式由正弦(命名為“s”)、餘弦(“c”)、反正切(“a”)、自然對數(“l”)、指數組成(e') 和整數階的 Bessel 函式 (j(n,x)’)。毫無疑問,更多的功能會及時添加。圖書館將比例設置為 20。如果您願意,可以將其重置為其他值。這些數學庫常式的設計在別處討論[4]

  • [4]Robert Morris,參考標準數學子程序庫,

然而,那篇論文看起來很難找到。

因此,從清單來看,基本的三角函式似乎早在 V1.1 時就已成為系統的一部分。bc在載入常式中使用這些。


Unix遺產維基百科,免費的百科全書

羅伯特·莫里斯

Life with Unix 說:寫 dc 並與 Lorinda Cherry 在一起。

一位研究 Unix 讀者說:鮑勃(羅伯特)莫里斯涉足任何涉及數學的領域,無論是數值分析還是數論。Bob 發明了獨特的原始實用程序typo,並且dc- bc(與 Lorinda Cherry)編寫了大部分數學庫,並編寫了素數和因子(與 Thompson 一起)。他的一系列密碼程序培養了該中心對密碼學的持續興趣。

洛琳達櫻桃

Life with Unix 說:作家工作台的作家(措辭、風格等)、be 和 dc。寫eqnbwk

一位研究 Unix 讀者說:Lorinda L. Cherry 與 Morris 在dc-bctypo. Lorinda 始終著迷於文本處理,發起eqn並發明了元件,這是一種近似解析器,在著名的 Writer’s Workbench®, ww6(v8) 中被利用。


艾略特 803

當然不是沒有實現更多功能的系統,或者可能沒有將這些作為核心功能。但那是歷史……:P

艾略特 803 加法

艾略特 803 加法

arccos, arcsin, tan- 是sin, cos,arctan的補充。


FORTRAN

1958 年


基本的

1964 年出生的 BASIC有SIN,和 .COSTANATN

基本觸發

基本手冊 (1964)

根據@roaima的評論。

家用電腦上使用的大多數 BASIC 方言(大約 1975 年以後)也有 SIN、COS、TAN、ATN(arctan)。沒有其他反例。我假設包含 TAN 是為了在使用 SIN/COS 時最小化誤差範圍,因為所有這些三角函式都是通過一個相當小的查找表生成的。

阿波羅 11 號

APOLLO 11 命令和月球模組的原始碼顯示它們至少有一個子程序ARCTAN

你可以說他們在沒有子程序的情況下成功登陸月球TAN;)

科爾迪克

CORDIC(Volder 算法)在 trig 實現方面值得一提。


統計數據

@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

潛水

不是深入探討,但至少對這個主題有更多了解。ALGOL 的論文可能是最符合要求的。

至於 BC,在沒有找到直接引用的情況下,Morris / Cherry 決定通過-l選項從庫中載入來包含這些特定的基本功能。


簡而言之,不是不想舉例tan,而是歷史表明選擇了哪些三角函式作為基礎來實現——根據資源和使用情況。

引用自:https://unix.stackexchange.com/questions/652493