Não que isso seja realmente um problema para quem já enfrentou esse problema sintático antes, mas vejo uma grande quantidade de confusão decorrente do uso do sinal de intercalação ( ^
) como a operação XOR em vez da operação de exponenciação matemática amplamente aceita.
É claro que existem muitos lugares em que o uso incorreto do cursor é explicado e corrigido, mas não encontrei nenhuma fonte definitiva sobre o motivo pelo qual o cursor recebeu um significado diferente.
Era uma questão de conveniência? Um acidente? Obviamente, o raciocínio poderia ser diferente para os vários idiomas; portanto, as informações, sob qualquer aspecto, seriam esclarecedoras.
Respostas:
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):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.fonte
^
para sobrescrito . E faz sentido para mim usar um caractere "para cima" para sobrescrito e um caractere "para baixo" (_
) para subscrito.^
sugere uma seta para cima, que por sua vez sugere a posição tradicional de um expoente sobrescrito, por isso é um pouco natural. Tenho certeza de que Donald Knuth responderia a um e-mail perguntando sobre sua decisão de usar^
para exponenciação no TeX, mas, como ele está ocupado trabalhando em coisas mais importantes, como a conclusão do TAOCP, não quis dar esse passo (considerei isto).