Riepilogo esecutivo
Escludendo i Big-Integer, le stringhe che hanno più di un carattere sono intrinsecamente più complicate dei numeri perché:
- sono rappresentati come una lista (o albero poco profondo) di più numeri
- può essere alfabetizzato
- ha la distinzione tra maiuscole e minuscole
- ha segni di punteggiatura, accenti, caratteri e spazi bianchi, che devono essere trattati in modo diverso
- hanno codifiche di caratteri che aggiungono le loro complessità.
- potrebbe utilizzare molta memoria (se abbastanza grande)
I Big-Integer potrebbero essere complicati quanto le stringhe ASCII o EBCDIC con maiuscole minuscole (o tutto maiuscole).
Dettagli
Che cos'è una stringa?
Una stringa è un elenco di caratteri. I caratteri sono solo numeri e una codifica di caratteri che fornisce a ciascun personaggio un numero per rappresentarlo. Quindi una stringa è essenzialmente un elenco di numeri.
Che cos'è un numero?
Escludendo alcuni computer per scopi speciali presso le strutture di ricerca, ogni popolare processore ha integrato interi (da 8 a 64 bit) e punti mobili IEEE (32 e 64 bit). I processori popolari hanno istruzioni per fare semplici calcoli matematici: +, -, /, e * su questi vari tipi di ints e float. I linguaggi di programmazione più diffusi hanno una sintassi diretta che viene compilata su questi opcode in modi molto semplici.
Numeri più grandi?
Molte lingue hanno un Big-Integer che memorizza valori più grandi di quelli che si adattano a un intero hardware a 64 bit. Come le stringhe, sono essenzialmente elenchi di numeri. A volte BigInt è implementato come una stringa, ma spero che sia raro oggi. Come le stringhe, i bigint tendono ad essere più difficili da usare rispetto ai semplici numeri supportati da hardware. Puoi riempire la memoria con loro, ecc. Come parte a parte, strumenti come Spire promuovono abilmente gli Integri su BigIntegers a seconda dei casi.
Codifica caratteri
Le stringhe venivano codificate in EBCDIC, ASCII, WinAnsi e una serie di altri formati che uscivano prima di Unicode. Con Unicode, ci sono UTF-8, UTF-16, UTF-32 e altri modi di rappresentare i caratteri come uno o più byte. Alcune codifiche dei caratteri sono compatibili unidirezionali con gli altri, ma la maggior parte non lo sono. ASCII ha solo caratteri a 8 bit, ma una stringa in UTF-8 è in realtà una struttura ad albero poco profonda in cui ogni carattere è composto di 1-4 byte (grazie @ gnasher729). E questa è solo la rappresentazione di un singolo "punto di codice" in byte. I personaggi logici stessi sono a volte composti da più punti di codice (un personaggio base più un accento), quindi hai grapheme cluster per trattare con (grazie @ gnasher729).
Pensieri di separazione
Qualsiasi cosa può essere complicata come vuoi tu. I numeri possono essere positivi, negativi o pari a zero (i punti di galleggiamento IEEE possono anche essere zero negativi). Possono essere pari, dispari, primi, ratios, immaginari, irrazionali, trascendentali, o avere molte altre proprietà che hanno tenuto i teorici dei numeri e hanno messo i teorici impegnati per secoli e continueranno a farlo.
Ma le stringhe di caratteri rappresentano le lingue e hai bisogno di caratteri per renderle, che hanno il loro set di mal di testa (e problemi di licenza). I cinesi i cui antichi nomi di famiglia coinvolgono personaggi che non fanno altrimenti parte del loro alfabeto di circa 10.000 caratteri si stanno arrampicando per includere i loro nomi in Unicode. Ci sono lingue perse e argomenti relativi alla necessità di includere linguaggi inventati come Klingon nei set di caratteri. Penso che quando aggiungi tutto questo, oltre alle espressioni regolari, quindi in generale , le stringhe sono più complicate dei numeri.
Probabilmente per ogni problema di complessità delle stringhe, un grande studente di Matematica potrebbe far apparire varie serie, insiemi, divergenze e altri problemi complessi. Ma penso che tu stia definendo numeri come "interi, float e forse Big-Integer" non come "polinomi, serie e oltre".