No es que sea realmente un problema para cualquiera que haya enfrentado este problema sintáctico antes, pero veo una gran cantidad de confusión derivada del uso de caret ( ^
) como la operación XOR en lugar de la operación de exponenciación matemática ampliamente aceptada.
Por supuesto, hay muchos lugares donde se explica y corrige el (mal) uso del caret, pero no he encontrado ninguna fuente definitiva de por qué se le dio un significado diferente al caret.
¿Era una cuestión de conveniencia? ¿Un accidente? Obviamente, el razonamiento podría ser diferente para los distintos idiomas, por lo que la información en cualquier aspecto sería perspicaz.
Respuestas:
Aunque hubo precursores más antiguos, al influyente matemático francés Rene Descartes generalmente se le atribuye la introducción de exponentes superíndices (a b ) en la escritura matemática, en su trabajo Geometrie, que se publicó en 1637. Esta es la notación que todavía se usa universalmente en matemáticas en la actualidad.
Fortran es el lenguaje de programación más antiguo ampliamente utilizado para cálculos numéricos que proporciona un operador de exponenciación, data de 1954. La operación de exponenciación se denota con un doble asterisco
**
. Cabe señalar que muchas computadoras en ese momento usaban codificaciones de caracteres de 6 bits que no proporcionaban un carácter de intercalación^
. El uso de**
posteriormente fue adoptado por los creadores de varios lenguajes de programación más recientes que ofrecen una operación de exponenciación, como Python.El primer conjunto de caracteres ampliamente adoptado que contenía el símbolo de intercalación
^
era la codificación ASCII de 7 bits que se estandarizó por primera vez en 1963. El lenguaje de programación más antiguo que conozco que utilizaba el símbolo de intercalación para denotar la exponenciación es BASIC, que data de 1964. Aproximadamente el mismo vez que IBM adoptó la codificación de caracteres EBCDIC , que también incluye el cursor^
.El lenguaje C entró en existencia en 1972. No proporciona un operador de exponenciación, sino que admite exponenciación a través de funciones de biblioteca como
pow()
. Por lo tanto, no es necesario reservar ningún símbolo para la exponenciación en C y otros lenguajes posteriores de la familia C, como C ++ y CUDA.Por otro lado, y poco común para lenguajes de programación hasta ese momento, C proporciona símbolos para operaciones bit a bit. El número de caracteres especiales disponibles en ASCII de 7 bits era limitado, y dado que había una "afinidad natural" de otras operaciones con ciertos caracteres especiales, por ejemplo,
&
para AND y~
NOT, no había tantas opciones para el símbolo de XOR .No conozco una justificación publicada proporcionada por Ritchie o Kernighan en cuanto a por qué eligieron
^
denotar XOR específicamente; La corta historia de C de Ritchie no dice nada sobre este tema. Una mirada a la especificación para el precursor de C, el lenguaje B , revela que no tiene un operador XOR, pero ya se utiliza todos los caracteres especiales que no sea^
,$
,@
,#
.[Actualización] Envié un correo electrónico a Ken Thompson, creador de B y uno de los cocreadores de C, preguntando por la razón para elegir
^
como operador XOR de C y solicitando permiso para compartir la respuesta aquí. Su respuesta (ligeramente reformateada para facilitar la lectura):El uso de
^
para la exponenciación en "matemáticas" al que se refiere es en realidad un uso establecido en una fecha mucho más tardía para sistemas de composición tipográfica como Knuth's TeX que data de 1978, interfaces de línea de comandos para sistemas de álgebra como Mathematica que data de 1988 y gráficos calculadoras a principios de la década de 1990.¿Por qué estos productos adoptaron el uso de
^
para exponenciación? En el caso de las calculadoras sospecho la influencia de BASIC. Durante la década de 1980 fue un primer lenguaje de programación muy popular y también se integró en otros productos de software. Por lo tanto, la notación habría sido familiar para muchos compradores de las calculadoras. Mi memoria es vaga, pero creo que incluso hubo calculadoras que realmente ejecutaban intérpretes BASIC simples.fuente
^
para superíndice . Y tiene sentido para mí usar un carácter "arriba" para el superíndice y un carácter "abajo" (_
) para el subíndice.^
sugiere una flecha hacia arriba, que a su vez insinúa la posición tradicional de un exponente superíndice, por lo que es un poco natural. Estoy seguro de que Donald Knuth respondería a un correo electrónico preguntando sobre su decisión de usar^
para la exponenciación en TeX, pero dado que está ocupado trabajando en cosas más importantes, como completar TAOCP, no quise dar ese paso (lo consideré eso).