history of program atan2(y,x)和pow(x,y)

編年史python

1951 – Regional Assembly Language 
1952 – Autocode 
1954 – IPL (LISP語言的祖先) 
1955 – FLOW-MATIC (COBOL語言的祖先) 
1957 – FORTRAN (第一個編譯型語言) 
1957 – COMTRAN (COBOL語言的祖先) 
1958 – LISP 
1958 – ALGOL 58 
1959 – FACT (COBOL語言的祖先) 
1959 – COBOL 
1959 – RPG 
1962 – APL 
1962 – Simula 
1962 – SNOBOL 
1963 – CPL (C語言的祖先) 
1964 – BASIC 
1964 – PL/I 
1966 – JOSS 
1967 – BCPL (C語言的祖先) 
1968 – Logo 
1969 – B (C語言的祖先) 
1970 – Pascal 
1970 – Forth 
1972 – C 
1972 – Smalltalk 
1972 – Prolog 
1973 – ML 
1975 – Scheme 
1978 – SQL 
1980 – C++ (既有類的C語言,改名於1983年7月) 
1983 – Ada 
1984 – Common Lisp 
1984 – MATLAB 
1985 – Eiffel 
1986 – Objective-C 
1986 – Erlang 
1987 – Perl 
1988 – Tcl 
1988 – Mathematica 
1989 – FL 
1990 – Haskell 
1991 – Python 
1991 – Visual Basic 
1993 – Ruby 
1993 – Lua 
1994 – CLOS (ANSI Common Lisp的一部分) 
1995 – Java 
1995 – Delphi (Object Pascal) 
1995 – JavaScript 
1995 – PHP 
1996 – WebDNA 
1997 – Rebol 
1999 – D 
2000 – ActionScript 
2001 – C# 
2001 – Visual Basic .NET 
2002 – F# 
2003 – Groovy 
2003 – Scala 
2007 – Clojure 
2009 – Go 
2011 – Dart程序員

從1951年2014年,人類一共發明了256種編程語言,每一種語言的出現都帶有某些新特徵。編程語言不斷的在革新,很快就會有超出這個清單的新編程語言出現算法


1801 - Joseph Marie Jacquard用打孔卡爲一臺織布機編寫指令,在掛毯上織出了「hello, world」字樣。當時的reddit網友對這項工做的反響並不熱烈,由於它既缺乏尾遞歸調用,又不支持併發,並且甚至都沒有注意在拼寫時恰當地區分大小寫。編程

Jacquard織布機是第一臺可進行程序控制的織布機。用打孔卡進行編程的概念,直到電子計算機被髮明出來以後仍然被普遍運用。api

最先的Hello World程序(出自K&R C)打印的是全小寫的字符串:」hello, world」。瀏覽器

在許多英文技術社區裏,不正確地使用大小寫發貼會被視做是小白的行爲。(如把「Python」拼做「python」,把「FreeBSD」拼做「freebsd」,把「Qt」拼做「QT」)安全


1842 - Ada Lovelace寫了世界上第一個程序。她的努力只遇到了一點點小小的麻煩,那就是:實際上並無任何計算機可以用來運行她的程序。後來的企業架構師們從新吸取了她的這個技能,用來學習如何更好地使用UML進行編程。微信

Ada Lovelace爲Charles Babbage的分析機寫了一個計算伯努利數的算法實現,所以被後世公認爲是世界上第一個程序員。實際上,分析機因爲其設計思想過於先進,在當時根本沒有 被製造出來。(Babbage的分析機通常被認爲是現代電子通用計算機的先驅)markdown

諷刺如今的某些「軟件架構師」頂多只會紙上談兵地畫畫UML。架構


1936 - Alan Turing發明了世間一切程序語言的最終形態,但很快他就被英國軍情六處「請」去當007了,以致於他根原本不及爲這些語言申請專利。

與通用圖靈機(Universal Turing machine)等價的語言被稱爲圖靈完備的(Turing 
completeness),它定義了「什麼樣的語言能夠被稱做是程序語言」。

二戰期間Turing曾祕密地爲英國軍方工做,破解德軍的Enigma密碼機,並在戰後被授予大英帝國勳章。但這項事實直到多年之後才向公衆公開


1936 - Alonzo Church同時也發明了世間一切程序語言的最終形態,甚至作得更好。但他的λ演算被絕大部分人忽視了,由於它與C語言「不夠像」。儘管存在着這樣的批評,但事實上,C在當時尚未被髮明出來。

Church是Turing在Princeton的博士生導師,他在λ演算方面的工做先於Turing指出了不存在一個對可斷定性問題的通用解法,這後來證實和Turing針對停機問題提出的圖靈機模型是等價的。即著名的Church-Turing論題。

說Church「甚至作得更好」,由於λ演算爲後世全部的函數式語言提供了理論基礎。

如今一種常見的關於函數式編程的批評就是:「它們與C語言不夠像」。


1940年代 - 一些直接採用佈線和開關來進行程序控制的「計算機」出現了。工程師們當時這麼作,聽說是爲了避開「用空格仍是用製表符縮進」這樣的論戰。

聽說當時負責設計ENIAC的工程師中間曾經發生過這樣的爭論:

  • 空格比製表符好。

  • 製表符比空格好。

  • 4個空格比8個空格好。

  • 什麼?用2個空格的通通燒死。

關於這臺具備里程碑意義的人類史上第一臺電子計算機ENIAC上應該預裝何種編輯器,工程師們還發生過這樣的爭吵:

  • Vim比Emacs好!

  • Emacs比Vim好!

  • 強烈推薦Sublime Text。

  • 你丫用編輯器的都是找虐,IDE纔是王道。

  • 沒錯,要用就用世界上最好的公司微軟開發出來的世界上最好的IDE:Visual Studio。

  • 我早就看透了無謂的編輯器論戰什麼的了,我要告訴樓上吵架的,大家全都是傻逼!

最後,工程師們一致決定使用佈線和開關來爲他們即將發明的計算機進行編程,機智地避開了全部這些無謂的爭吵,最終齊心合力創造出了人類歷史上第一臺電子計算機:ENIAC。(鼓掌)

兩位ENIAC程序員在運用敏捷開發方法進行愉快的結對編程。「自從拋棄伴隨我多年的Emacs和HHKB Pro、改用佈線和開關進行編程以後,個人左手小指麻痹奇蹟般地痊癒了。」其中一位接受採訪時如是說。另外一位則表示:「新的編程方式讓曾經專一頸椎病20年的我獲得了完全的康復,不用再成天盯着顯示屏,身心同時獲得了極大的放鬆,值得大力推廣!」)


1957 - John Backus和IBM發明了FORTRAN語言。關於IBM或FORTRAN並無什麼特別可笑的地方。除了,寫FORTRAN程序的時候不繫藍領帶將被編譯器視做是一個syntax error。

藍領帶、白襯衫、深色西裝彷佛是IBM公司20世紀經典的dress code。

早期FORTRAN(FORTRAN 77)對程序書寫格式的要求那是至關嚴格。(例如,蛋疼的固定格式縮進)


1958 - John McCarthy和Paul Graham發明了LISP。因爲冷戰期間的戰略括號資源儲備所形成的巨大成本,LISP從未流行過。儘管欠缺足夠的流行度,LISP(如今叫作 「Lisp」,有時叫「Arc」)仍然被視做一門有影響力的語言,在關鍵的算法思想諸如遞歸(recursion)和提高逼格 (condescension)上尤其典範。

LISP發明的那一年Paul Graham其實尚未出生。聽說是由於某本叫作《Haste and 
Waste》的僞程裝黑聖典實在太有名了,以致於許多編程小白們把寫這本書的傳奇人物同Lisp之間畫上了等號。

提高逼格確實是一種與遞歸調用一樣關鍵的算法思想。嗯,你懂的。


1959 - 在輸掉了和L. Ron Hubbard之間的一場打賭以後,Grace Hopper和其餘幾個抖S發明了所謂的「面向Boilerplate的全大寫化語言(Capitalization Of Boilerplate Oriented Language,COBOL)」。多年之後,因爲一些被誤導的、性別歧視主義者對Adm. Hopper關於COBOL的工做的報復,在Ruby技術會議上不時會看到一些厭女主義乃至仇視女性的材料出現。

L. Ron Hubbard是山達基教(Scientology)的創始人,二戰期間曾與Grace 
Hopper一樣供職於美國海軍。(尚不清楚這兩人之間有無其餘聯繫)

COBOL語言以代碼極其冗長和通篇大寫字母的書寫風格而聞名。

Adm. Hopper:Grace Murray Hopper女士的軍銜是Rear Admiral Lower Half,即美國海軍准將。


1964 - John Kemeny和Thomas Kurtz創造了BASIC,一個爲非計算機科學家設計的非結構化的程序語言。

1965 - Kemeny和Kurtz兩人goto到了1964。

調侃BASIC語言對行號和goto的無節制濫用。


1970 - Guy Steele和Gerald Sussman創造了Scheme。他們的工做致使了一系列以《Lambda之究極(Lambda the Ultimate)……》爲標題開頭的論文發表,並在《Lambda之究極廚房神器》這一篇中達到了最高潮。以這篇論文爲基礎,開始了一個終年累月的、收 視率究極失敗的晚間電視購物節目。Lambda們由於其概念相對難以理解而被大衆所忽視,直到將來的某一天,Java語言終於讓它們變得有名了起來。經過 不包含它們這件事情。


1970 - Niklaus Wirth創造了Pascal,一個過程式的語言。很快就有人開始聲討Pascal,由於它使用了相似「x := x + y」這樣的語法,而不是更爲人熟知的類C語法「x = x + y」。儘管存在着這樣的批評,而事實上當時C尚未被髮明出來。


1972 - Dennis Ritchie發明了一把射擊時能同時向前和向後兩個方向發射子彈的絕世好槍。但他對此發明形成的致死和終身殘疾數量感到還不夠滿意,因此他又發明了C語言和Unix。


1972 - Alain Colmerauer設計了邏輯編程語言Prolog。他的目標是創造一個具備兩歲小孩智商的程序語言。爲了證實他成功達到了這個目標,他展現了一個Prolog程序,它對於每條查詢都會機智地給出相同的回答:「No」。


1973 - Robin Milner創造了ML,一個創建在M&M類型理論基礎上的語言。由ML衍生而來的SML加上了一套形式語義的規範。當被要求給這個形式語義自己 書寫一套形式語義時,Milner的腦子爆掉了。其餘ML家族的著名語言還包括OCaml,F#,和,Visual Basic。


1980 - Alan Kay創造了Smalltalk併發明瞭「面向對象」這個詞。當被問到它的含義時,他回答道:「Smalltalk程序自己就是對象。」當被問到對象是由 什麼組成時,他回答到:「對象。」當再一次被問到這個問題時,他說「看,它從裏到外都是對象。直到你抽出一隻烏龜。」

Smalltalk的設計從很大程度上受到了Logo的影響。


1983 - 爲了記念偉大的先輩程序員Ada Lovelace那可以寫出永遠也沒法被執行的代碼的彪悍技能,Jean Ichbiah和美國國防部創造了Ada語言。儘管缺少證據顯示有任何重要的Ada程序曾經被完成過,歷史學家仍然確信Ada是個成功的公益項目,它讓數 以千計的國防承包商免於淪落爲與黑幫爲伍。

Ada曾經是美國國防部指定的嵌入式計算機系統惟一開發語言,在其研發上耗資巨大。(國防承包商們因而不用靠販賣軍火給黑幫來維持生計了)

雖然有充分的證據顯示Ada的整型範圍溢出檢查失敗致使弄壞了歐空局的一枚Ariane 5運載火箭,不過美國國防部發言人對此表示:關我P事。


1983 - Bjarne Stroustrup把他所據說過的一切都試圖嫁接到C上,創造出了C++。最後獲得的語言是如此地複雜,以致於程序必須被送到將來去讓「天網」人工智能 進行編譯。編譯時間難以容忍。天網開展這項服務的動機仍然鮮爲人知,但來自將來的發言人說道:「沒什麼好擔憂的,寶貝。」帶着一口奧地利腔的機械口音。有 一些來自坊間的推測,所謂的天網只不過是個自命不凡的緩衝區溢出而已。


1986 - Brad Cox和Tom Love創造了Objective-C,宣稱「該語言完美地結合了C的內存安全性與Smalltalk的神奇效率」。如今的歷史學家懷疑這兩人實際上是誦讀障礙症患者。

「C的內存安全性…」

Smalltalk編譯出來的程序以低效緩慢著稱。


1987 - Larry Wall在電腦前打了個盹,Larry Wall的腦門子壓到了鍵盤上。醒來以後,Larry Wall深信 ,在Larry Wall的顯示器上出現的神祕字符串並不是是隨機的,那是某種編程語言之程序樣例的神諭。那必是上帝要他的先知,Larry Wall,去設計的。Perl語言就此誕生了。


1990 - 一個由Simon Peyton-Jones、Paul Hudak、Philip Wadler、Ashton Kutcher和藹待動物組織(PETA)組成的委員會創造了Haskell,一種純函數式的、非嚴求值的語言。Haskell因爲使用了Monad這種 較費解的概念來控制反作用而遭到了一些批評意見。Wadler試圖平息這些質疑,他解釋說:「一個單子(Monad)說白了不過就是自函子範疇上的一個幺 半羣而已,這有什麼難以理解的?」


1991 - 荷蘭程序員Guido van Rossum爲了一次神祕的手術而進行了一次阿根廷之旅。回來後他帶着一個巨大的顱疤,發明了Python,而被數以軍團計的追隨者們加冕爲「終生大獨裁 者」,並向全世界宣佈「要辦到一件事情,只可有惟一的一種方法!」。整個波蘭陷入了恐慌。

BDFL(Benevolent Dictator for 
Life):開源社區一種流行的說法,「仁慈的」終生大獨裁者。這個說法最先指的就是Guido van Rossum。

希特勒在提出創建「純正的雅利安人國家」「統一的大德意志帝國」並實現了德奧合併以後,翌年便入侵了波蘭,引起了第二次世界大戰。「我一我的征服了整個歐洲!」(感受好棒好棒的)


1995 - 在家門口附近的一個意大利飯館用餐時,Rasmus Lerdorf意識到他吃的那盤意麪正好是一個用來理解WWW萬維網的極好模型,而全部的Web應用都應該仿照它們的媒介那樣去作。在他的餐巾的背後,他 設計出了著名的「可編程超連接Pasta(Programmable Hyperlinked Pasta,PHP)」語言。PHP的文檔至今仍然保留在那片餐巾上。

PHP最顯著的特色就是:代碼是能夠直接嵌在HTML文檔中的。


1995 - 松本「Mad Matz」行弘創造出了Ruby語言,用來闢謠一些意味不明的、有關澳洲將會變成一片由莫霍克族戰士和Tina Turner統治的荒漠的末世預言。該語言後來被它的真正發明者David Heinemeier Hansson從新命名爲Ruby on Rails。(關於某個叫松本行弘的人發明了一種叫作Ruby的語言這件事情從未發生過,最好在這篇文章的下一個版本中刪掉。 - DHH表示)

最先關於Ruby的國際會議不是RubyConf,而是每一年在澳大利亞舉辦的OSDConf。

這裏應該是在吐槽Ruby的殺手級應用Ruby on Rails實在太有名了,以致於超越了原來的Ruby語言自己。

Matz並無爲「Ruby」這個名字註冊商標——本着開源的黑客精神。

而DHH(RoR的做者)卻把「Ruby on 
Rails」這個(包含了「Ruby」字樣的)名稱註冊成了商標,而且阻止別人未經受權使用「Rails」這個名字。

(雖然搶注商標對開源來講未必是一件壞事情——Python基金會今年在歐洲還捲入了一場商標之爭了不是)


1995 - Brendan Eich讀完了歷史上全部在程序語言設計中曾經出現過的錯誤,本身又發明了一些更多的錯誤,而後用它們創造出了LiveScript。以後,爲了緊跟 Java語言的時髦潮流,它被從新命名爲JavaScript。再而後,爲了追隨一種皮膚病的時髦潮流,這語言又被命名爲ECMAScript。


1996 - James Gosling發明了Java。Java是一個相對繁冗的、帶垃圾收集的、基於類的、靜態類型的、單分派的面嚮對象語言,擁有單實現繼承和多接口繼承。Sun竭盡全力地宣傳着Java的獨一無二不一樣凡響之處。


2001 - Anders Hejlsberg發明了C#。C#是一個相對繁冗的、帶垃圾收集的、基於類的、靜態類型的、單分派的面嚮對象語言,擁有單實現繼承和多接口繼承。微軟竭盡全力地宣傳着C#的獨一無二不一樣凡響之處。


2003 - 一個叫Martin Odersky的醉漢看見了好時瑞森花生醬杯的廣告,展現了某我的的花生醬倒入另外一我的的巧克力的場景,他突然有了個點子。他創造了Scala,一種結合 了面向對象和函數式編程的語言。這同時激怒了兩個陣營的忠實信徒,他們馬上宣佈要發動聖戰燒死異教徒。


2005年

David Hanselmeyer Hansen建立了一個名爲Ruby on Rails的Web框架,人們再也不記得這二者是分開的東西。

 

2006年

約翰·雷西格(John Resig)爲JavaScript編寫了一個幫助程序庫,每一個人都認爲這是一種語言,而且從互聯網上覆制和粘貼jQuery代碼。

 

2009年

肯·湯普森(Ken Thompson)和羅伯·派克(Rob Pike)決定製做一種像C這樣的語言,可是用於更多的安全設備和更適銷的產品,並以Gophers做爲吉祥物,他們稱之爲Go。

 

Graydon Hoare也想要像C這樣的語言,他稱之爲Rust。你們都要求每個軟件都要當即在Rust裏面重寫。Graydon想要更炫的東西,並開始在Swift上爲Apple工做。

 


2012

安德斯·海爾斯伯格(Anders Hjelsberg)想在瀏覽器中編寫C#,他設計了TypeScript,它是JavaScript,可是其中包含更多的Java。(這人又出現了)

 

2013

傑里米·阿什基納斯(Jeremy Ashkenas)想要像Ruby開發者同樣快樂,他建立了CoffeeScript,編譯成JavaScript,但看起來更像Ruby。

 

2014

2010年7月開始,克里斯·拉特納(Chris Lattner)開始設計Swift。完成基礎架構後,帶領開發小組陸續完成語法設計、編譯器、運行時、框架、IDE和文檔等相關工做。這個語言在2014年WWDC大會上公開。


將來的趨勢

因爲將來人工智能的大熱,我認爲適合人工智能的語言將會成功,我比較傾向於天然語言如Python。
 
  • 轉載自微信公衆號 STEAM解密

 


atan2(y,x)和pow(x,y)


atan2(x,y):atan2()區別於atan()函數,返回-pi~+pi範圍的角度;
使用過程當中發如今MATLAB和Excel中該函數的表達形式不一致,故記錄以下。
- Excel
定義atan2(x,y)返回點(x,y)與x軸正向的夾角;
即在第一象限中atan2(x,y)=atan(y/x).
- Matlab與CFX CEL
定義atan2(y,x)返回點(x,y)與x軸正向的夾角;
即在第一象限中atan2(y,x)=atan(y/x).
pow(x,y):pow函數是求次方的函數,

函數原型是double pow(double a,double b);
使用時應包含math.h頭文件。

函數pow(x,y)實現運算x^y,即x的y次方,這裏x和y都爲整數。

算法的基本思想是,減小乘法次數,重複利用結算結果,例如:x^4,若是逐個相乘的話,須要四次乘法。若是咱們這樣分解(x^2)*(x^2)就只須要2兩次乘法,由於x^2的結果咱們能夠重複利用。因此咱們最好作對稱的分解指數y,而後求x^(y/2)的平方。

相關文章
相關標籤/搜索