Solo un numero digita nella progettazione della lingua

8

Attualmente sto imparando la costruzione del compilatore e il design del linguaggio e sto pensando a quali tipi di dati nativi voglio supportare nella mia lingua. Ora c'è un sacco di lingue che fanno una distinzione tra numeri interi e reali. Tuttavia, ricordo di aver visto un talk di Douglas Crockford in cui diceva:

Having a single number type in the system means that you can not make a bug by choosing the wrong number type

Ha anche detto che raccomanda una rappresentazione numerica diversa dall'IEEE-754 comunemente usato (per favore correggimi se sbaglio), essendo il DEC64. Di qui la mia domanda: per un linguaggio generico che ha un focus prevalentemente educativo, quale rappresentazione del numero dovrei usare?

EDIT: Con focus educativo sto parlando dei miei progressi nell'apprendimento dei compilatori, non di educare gli altri.

    
posta Niklas Vest 29.05.2018 - 08:29
fonte

2 risposte

11

Abbiamo una rappresentazione numerica diversa in generale perché hanno diversi punti di forza e di debolezza, che si tratti di velocità, precisione o intervallo. Anche questo deve essere il caso perché non possiamo rappresentare tutti i numeri reali con memoria finita, dobbiamo sempre scegliere alcuni che non possiamo rappresentare esattamente.

La citazione di Doug Crockford che hai è idiota borderline, se puoi scegliere solo una rappresentazione, OK non puoi scegliere quella sbagliata, ma non puoi scegliere quella giusta. la tua unica scelta funzionerà per alcuni usi ma non per tutti.

È vero che alcune rappresentazioni sono probabilmente migliori come prima scelta goto DEC64 sembra ragionevole qui. È una rappresentazione decimale in virgola mobile, quindi sarà meno sorprendente di IEEE-754 (che è il punto di virgola mobile) nella maggior parte delle situazioni in quanto le persone tendono a pensare in decimale, ad es. può rappresentare esattamente 0.3. Avrà ancora problemi di rappresentazione in alcune circostanze, ad es. aggiungendo numeri veramente grandi e veramente piccoli insieme

per ulteriori approfondimenti suggerirei la serie di articoli di Richard Harris "perché X non ti aggiusta blando punto blues"

    
risposta data 29.05.2018 - 13:30
fonte
2

Per una lingua generica, i numeri dovrebbero comportarsi come quelli insegnati in classe matematica. Solo le lingue speciali, come quelle per i driver di dispositivo, dovrebbero avere una matematica speciale.

Suggerirei di usare numeri di precisione arbitraria piuttosto che numeri di precisione fissa. Sì, sono più lenti ma si comportano come se la gente si aspettasse che il numero si comporti. Inserendo dei limiti artificiali su di essi verrà segnalato come bug.

    
risposta data 29.05.2018 - 16:32
fonte