Esistono linguaggi di programmazione con tipi di numeri matematici? [chiuso]

2

Forse non ho formulato correttamente il titolo. C'è qualche linguaggio di programmazione che si occupa di tipi di numeri matematici naturali piuttosto che tipi di dati tipici che vediamo come Int32, Int64, Float, Double etc?

Per tipi di numeri naturali intendo espressioni simili a

natural (1, 2, 3 ...)
whole (0, 1, 2, 3 ...)
integer (-1, 0, 1, 2, 3 ...)
rational (-1, 0, 1, 1.25, 2, 3, 3.5 ...)
real (-1, 0, 1, 1.25, 2, 3, pi, 3.5 ...)
complex (-1, 0, 1, 1.25, 2, 3, pi, 3.5, i, 2i, 1 + 2i ...)

Oppure potrebbe essere un po 'più pratico e utile set di tipi, come

whole (0, 1, 2, 3 ...)
integer (-1, 0, 1, 2, 3 ...)
real (-1, 0, 1, 1.25, 2, 3, 3.5 ...)
complex (-1, 0, 1, 1.25, 2, 3, pi, 3.5, i, 2i, 1 + 2i ...)

in modo che se scrivo:

whole w = 1 // compiles
integer i = 1.2 // doesnt compile
real r = 1.2 //compiles
complex c = 1 + i //compiles

w = i //doesnt compile
i = w //compiles
r = i //compiles
c = r //compiles

So che posso raggiungerlo nella maggior parte dei linguaggi di programmazione usando uint32 , int32 , decimal etc tipi, ma non vedo l'ora di un linguaggio che non sembra tecnico sui tipi numerici.

Pochi punti:

  1. Ricerca di linguaggi di programmazione che definiscano i tipi numerici da una prospettiva matematica e non da un computer.

  2. So che le dimensioni contano sempre nella programmazione, ma supponiamo che le dimensioni non siano un problema per ora. O potrebbe essere configurabile e potrei impostare la dimensione come uint64 , int64 ecc. Ciò è più che mai necessario.

  3. Non sono in cerca di librerie matematiche che hanno tipi definiti come real , complex ecc. Voglio che quei tipi siano trattati come prima classe dal compilatore / linguaggio stesso in modo che venga eseguito il controllo degli errori statici.

Chiedilo solo per curiosità quando pensavo ai linguaggi di programmazione per scopi educativi per amici non programmatori.

    
posta nawfal 11.07.2015 - 23:42
fonte

3 risposte

8

I numeri reali e complessi non sono numerabili. Indipendentemente dalla rappresentazione scelta, quasi tutti di essi non possono essere memorizzati su qualsiasi cosa possa essere considerata un dispositivo informatico. Il più vicino che si può ottenere è il numero computabile, ma il test di due calcolabili è indecidibile. Anche senza tener conto di ciò, non è una rappresentazione molto pratica. Una sorta di numeri in virgola mobile a più precisione, o numeri razionali di precisione arbitraria, è l'opzione pratica più generale - nonostante il solo supporto (un sottoinsieme dei) numeri razionali. I valori naturali e gli interi sono comuni, tuttavia l'aritmetica dei numeri arbitrari di precisione arbitraria è supportata in molte lingue, alcuni dei quali li usano come tipo predefinito (o si aggiornano in modo trasparente quando si verifica un overflow).

Ora, come per il controllo del tipo statico: si escludono le librerie, ma "il controllo degli errori statici" è ugualmente possibile per i tipi di libreria. Semplicemente non ottieni letterali numerici convenienti. Esistono alcune lingue che consentono valori letterali definiti dall'utente.

Potrebbero esserci delle lingue che si iscrivono al particolare insieme di tipi numerici e conversioni implicite che proponi, ma è un gruppo piuttosto strano. Sei morto su queste specifiche? Molti linguaggi di alto livello come Python, Ruby e vari dialetti Lisp hanno numeri interi arbitrari e numeri in virgola mobile e complessi incorporati, e occasionalmente anche numeri razionali. Tuttavia non sono tipizzati staticamente. Allo stesso modo, la maggior parte dei linguaggi tipizzati staticamente è impostata su tipi di dimensioni fisse. Haskell potrebbe essere vicino, incluso il sovraccarico dei letterali interi sebbene non ritenga che i numeri complessi possano avere la sintassi 4i .

NB: quelli che chiami "numeri interi" sono solitamente chiamati numeri naturali . Alcuni matematici escludono 0 dai numeri naturali, ma ugualmente molti (e tutti gli informatici) lo includono. Gli interi sono i numeri interi.

    
risposta data 11.07.2015 - 23:59
fonte
0

FORTRAN , è chiuso. Ha INTEGER, REAL, COMPLESSO. REAL ha esplicitamente 2 lunghezze di precisione diverse. Il COMPLESSO non può essere negativo.

Looking for programming languages which names the numeric types from a mathematical perspective and not computer.

Fortran è particolarmente adatto per il calcolo numerico e il calcolo scientifico .

Some mathematicians exclude 0 from the natural numbers, but equally many (and all computer scientists) include it.

Zero è la programmazione per computer come The Big Bang è per AstroPhysics. ... Solo un pensiero.

    
risposta data 12.07.2015 - 00:48
fonte
0

Esistono Sistemi di algebra dei computer che di solito supportano le rappresentazioni dei numeri corretti necessari per qualsiasi calcolo eseguito.

    
risposta data 13.07.2015 - 05:08
fonte

Leggi altre domande sui tag