Chociaż byli starsi prekursorzy, wpływowy francuski matematyk Rene Descartes zwykle przypisuje się wprowadzenie do pisma matematycznego wykładników ( b ) w swojej pracy Geometrie, która została opublikowana w 1637 roku. Jest to notacja powszechnie stosowana obecnie w matematyce.
Fortran jest najstarszym językiem programowania szeroko stosowanym do obliczeń numerycznych, który zapewnia operator potęgowania, pochodzi z 1954 r. Operacja potęgowania jest oznaczona podwójną gwiazdką **
. Należy zauważyć, że wiele komputerów w tym czasie stosowało 6-bitowe kodowanie znaków, które nie zapewniało znaku karetki ^
. Użycie **
zostało następnie przyjęte przez twórców różnych nowszych języków programowania, które oferują operację potęgowania, takich jak Python.
Pierwszym szeroko przyjętym zestawem znaków, który zawierał kursor, ^
było 7-bitowe kodowanie ASCII, które zostało po raz pierwszy znormalizowane w 1963 roku. Najstarszy znany mi język programowania, który używał karetki do oznaczania potęgowania, to BASIC, który pochodzi z 1964 roku. czas IBM przyjął kodowanie znaków EBCDIC , które obejmuje również znak karetki ^
.
Język C powstał w 1972 roku. Nie zapewnia on operatora potęgowania, a raczej obsługuje potęgowanie za pomocą funkcji bibliotecznych, takich jak pow()
. Dlatego nie trzeba odkładać symbolu na potęgowanie w C i innych późniejszych językach z rodziny C, takich jak C ++ i CUDA.
Z drugiej strony, co do tej pory było rzadkie w przypadku języków programowania, C udostępnia symbole operacji bitowych. Liczba znaków specjalnych dostępnych w 7-bitowym ASCII była ograniczona, a ponieważ istniało „naturalne powinowactwo” innych operacji do niektórych znaków specjalnych, np. &
Dla AND i ~
NOT, nie było zbyt wielu wyborów dla symbolu XOR .
Nie jestem świadomy opublikowanego uzasadnienia przedstawionego przez Ritchie lub Kernighana, dlaczego zdecydowali się ^
na oznaczenie XOR; Krótka historia C autorstwa Ritchie milczy na ten temat. Spojrzenie na specyfikacji prekursorem C, język B , pokazuje, że nie ma operatora XOR, ale już wykorzystane wszystkie znaki specjalne inne niż ^
, $
, @
, #
.
[Aktualizacja] Wysłałem e-mail do Kena Thompsona, twórcy B i jednego ze współtwórców C, z pytaniem o uzasadnienie wyboru ^
jako operatora XOR C i prosząc o zgodę na udostępnienie tutaj odpowiedzi. Jego odpowiedź (nieco przeformatowana pod kątem czytelności):
Od: Ken Thompson
Wysłano: czwartek, 29 września 2016
04:50 Do: Norbert Juffa
Temat: Re: Uzasadnienie wyboru karetki jako operatora XOR w C?
był to losowy wybór pozostawionych postaci.
gdybym miał to zrobić jeszcze raz (co zrobiłem), użyłbym tego samego operatora dla xor (^) i bitowego uzupełnienia (~).
ponieważ ^ jest teraz bardziej znanym operatorem, w go ^ oznacza xor i również uzupełnia.
Zastosowanie ^
do potęgowania w „matematyce”, o której mówisz, jest w rzeczywistości ustalone w znacznie późniejszym terminie dla systemów składu, takich jak Teuth Knutha z 1978 r., Interfejsy wiersza poleceń dla systemów algebry, takich jak Mathematica z 1988 r., Oraz wykresy kalkulatory na początku lat 90.
Dlaczego te produkty przyjęły użycie ^
do potęgowania? W przypadku kalkulatorów podejrzewam wpływ BASIC. W latach 80. był to bardzo popularny pierwszy język programowania, a także był wbudowany w inne oprogramowanie. Zapis ten byłby zatem znany wielu nabywcom kalkulatorów. Moja pamięć jest niejasna, ale wierzę, że istniały nawet kalkulatory, które faktycznie obsługiwały proste interpretatory BASIC.