Embora houvesse precursores mais antigos, o influente matemático francês Rene Descartes é geralmente creditado por introduzir expoentes sobrescritos (a b ) na escrita matemática, em seu trabalho Geometrie, publicado em 1637. Essa é a notação ainda hoje usada universalmente na matemática.
O Fortran é a linguagem de programação mais antiga amplamente usada para cálculos numéricos que fornece um operador de exponenciação, datada de 1954. A operação de exponenciação é indicada por um asterisco duplo **
. Deve-se observar que muitos computadores da época usavam codificações de caracteres de 6 bits que não forneciam um caractere de interpolação ^
. O uso de **
foi posteriormente adotado pelos criadores de várias linguagens de programação mais recentes que oferecem uma operação de exponenciação, como o Python.
O primeiro conjunto de caracteres amplamente adotado que continha o sinal de intercalação ^
foi a codificação ASCII de 7 bits, padronizada pela primeira vez em 1963. A linguagem de programação mais antiga que eu conheço que usou o sinal de intercalação para indicar exponenciação é BASIC, que data de 1964. Em torno da mesma vez que a IBM adotou a codificação de caracteres EBCDIC , que também inclui o sinal de intercalação ^
.
A linguagem C surgiu em 1972. Ela não fornece um operador de exponenciação, mas suporta a exponenciação por meio de funções de biblioteca como pow()
. Portanto, nenhum símbolo precisa ser reservado para exponenciação em C e em outros idiomas posteriores da família C, como C ++ e CUDA.
Por outro lado, e incomum para linguagens de programação até aquele momento, C fornece símbolos para operações bit a bit. O número de caracteres especiais disponíveis no ASCII de 7 bits era limitado e, como havia uma "afinidade natural" de outras operações com certos caracteres especiais, por exemplo, &
para AND e ~
para NOT, não havia muitas opções para o símbolo para XOR .
Não conheço uma justificativa publicada fornecida por Ritchie ou Kernighan sobre o motivo pelo qual eles escolheram ^
denotar XOR especificamente; O breve histórico de C de Ritchie é silencioso sobre esse assunto. Um olhar sobre a especificação para o precursor C, a linguagem B , revela que ele não tinha um operador XOR, mas já usou todos os caracteres especiais que não ^
, $
, @
, #
.
[Atualização] Enviei email para Ken Thompson, criador de B e um dos co-criadores de C, perguntando sobre a justificativa para a escolha ^
como operador XOR de C e pedindo permissão para compartilhar a resposta aqui. Sua resposta (ligeiramente reformatada para facilitar a leitura):
De: Ken Thompson
Enviado: quinta-feira, 29 de setembro de 2016
04:50 Para: Norbert Juffa
Assunto: Re: Fundamentação da escolha do sinal de intercalação como operador de XOR em C?
foi uma escolha aleatória dos caracteres restantes.
se eu tivesse que fazer novamente (o que fiz), usaria o mesmo operador para xor (^) e complemento de bits (~).
como ^ agora é o operador mais conhecido, ^ é xor e também complementa.
O uso de ^
exponenciação em "matemática" a que você se refere é, na verdade, o uso estabelecido em uma data muito posterior para sistemas de tipografia como o TeX de Knuth, que data de 1978, interfaces de linha de comando para sistemas de álgebra como Mathematica, que data de 1988, e gráficos calculadoras no início dos anos 90.
Por que esses produtos adotaram o uso de ^
exponenciação? No caso de calculadoras, suspeito da influência do BASIC. Ao longo dos anos 80, foi uma primeira linguagem de programação muito popular e também foi incorporada a outros produtos de software. A notação, portanto, teria sido familiar para muitos compradores das calculadoras. Minha memória é vaga, mas acredito que havia até calculadoras que realmente executavam intérpretes BASIC simples.