Sebbene esistessero precursori più vecchi, l'influente matematico francese Rene Descartes di solito è accreditato per aver introdotto esponenti esponenti (un b ) nella scrittura matematica, nel suo lavoro Geometrie che fu pubblicato nel 1637. Questa è la notazione ancora universalmente usata in matematica oggi.
Fortran è il più vecchio linguaggio di programmazione ampiamente utilizzato per i calcoli numerici che fornisce un operatore di esponenziazione, risale al 1954. L'operazione di esponenziazione è denotata da un doppio asterisco **
. Va notato che molti computer a quell'epoca utilizzavano codifiche di caratteri a 6 bit che non fornivano un carattere di accento% codice%. L'uso di ^
è stato successivamente adottato dai creatori di vari linguaggi di programmazione più recenti che offrono un'operazione di esponenziazione, come Python.
Il primo set di caratteri ampiamente adottato che conteneva il **
di caret era la codifica ASCII a 7 bit che era la prima standardizzato nel 1963. Il più vecchio linguaggio di programmazione di cui sono a conoscenza che usasse il caret per indicare l'esponenziazione è il BASIC, che risale al 1964. Intorno alla stessa ora IBM adottò il EBCDIC codifica dei caratteri, che include anche il% caret% co_de.
Il linguaggio C è nato nel 1972. Non fornisce un operatore esponenziale, ma supporta l'esponenziazione tramite funzioni di libreria come ^
. Pertanto nessun simbolo deve essere messo da parte per l'esponenziazione in C e altre lingue successive nella famiglia C, come C ++ e CUDA.
D'altra parte, e non comune per i linguaggi di programmazione fino a quel momento, C fornisce simboli per operazioni bit a bit. Il numero di caratteri speciali disponibili in ASCII a 7 bit era limitato e poiché esisteva una "naturale affinità" di altre operazioni con determinati caratteri speciali, ad es. ^
per AND e pow()
per NOT, non c'erano molte scelte per il simbolo per XOR.
Non sono a conoscenza di una spiegazione razionale fornita da Ritchie o Kernighan sul motivo per cui hanno scelto &
per indicare specificamente XOR; La breve cronologia di C breve di Ritchie non tiene conto di questo problema. Uno sguardo alle specifiche del precursore di C, la lingua B , rivela che non ha avuto un operatore XOR, ma ha già utilizzato tutti i caratteri speciali diversi da ~
, ^
, ^
, $
.
[Aggiorna] Ho inviato un'email a Ken Thompson, creatore di B e uno dei co-creatori di C, chiedendo la logica per aver scelto @
come operatore XOR di C e chiedendo il permesso per condividere la risposta qui. La sua risposta (leggermente riformattata per la leggibilità):
From: Ken Thompson
Sent: Thursday, September 29, 2016 4:50 AM
To: Norbert Juffa
Subject: Re: Rationale behind choice of caret as XOR operator in C?
it was a random choice of the characters left.
if i had it to do over again (which i did) i would use the same
operator for xor (^) and bit complement (~).
since ^ is now the better known operator, in go, ^ is xor and also complement.
L'uso di #
per l'esponenziazione in "matematica" a cui si fa riferimento è effettivamente stabilito in una data successiva per la composizione di sistemi come Knuth's TeX che risale al 1978, interfacce a linea di comando per sistemi algebrici come Mathematica che risale al 1988 e calcola grafici all'inizio degli anni '90.
Perché questi prodotti adottano l'uso di ^
per l'esponenziazione? Nel caso delle calcolatrici sospetto l'influenza di BASIC. Durante gli anni '80 è stato un linguaggio di programmazione molto popolare ed è stato incorporato in altri prodotti software. La notazione quindi sarebbe stata familiare a molti compratori dei calcolatori. La mia memoria è vaga, ma credo che esistessero persino calcolatori che eseguivano in realtà semplici interpreti BASIC.