Metodi di libreria matematica nel linguaggio di programmazione Go di Google

8

Ho programmato in google Golang e mi sono divertito per la sua brevità, ma trovo sorprendente che quasi tutti i suoi metodi di libreria standard Math siano per il tipo a virgola mobile. C'è qualche ragione particolare per cui questi metodi non esistono per ints?

    
posta cobie 02.02.2013 - 01:26
fonte

1 risposta

8

La risposta breve è che Go è un successore di C, e la libreria matematica standard di C viene anche definita quasi esclusivamente in termini di valori in virgola mobile a precisione singola e doppia.

La risposta più lunga è che in un linguaggio tipizzato staticamente senza polimorfismo o sovraccarico di funzioni, come Go (o C), è necessario accontentarsi di un tipo per una funzione da prendere e restituire in anticipo, e una volta che si sta andando per gestire tipi specifici nella libreria matematica, ci sono operazioni molto più interessanti su numeri in virgola mobile che numeri interi. Per scegliere alcuni esempi

  • la radice quadrata o l'ennesima di un numero intero o di un numero in virgola mobile di solito non è rappresentabile come un intero

  • pochissimi valori interessanti delle funzioni trascendentali sono rappresentabili come numeri interi

  • la divisione dei valori in virgola mobile richiede meno arrotondamenti rispetto alla divisione di numeri interi

Si noti che questo non è così oneroso come potrebbe sembrare se i valori di input sono interi: un valore integrale può essere convertito in un valore in virgola mobile con un semplice typecast, e per lo più in modo accurato.

Quindi questa è la trama di linguaggi come Go o C. Altre lingue hanno altre opzioni:

  • Un linguaggio tipizzato in modo dinamico può fornire funzioni di libreria matematica che accettano o restituiscono più tipi a seconda di come vengono chiamati o se il valore restituito è rappresentabile come numero intero.

  • Un linguaggio con overloading di funzioni può fornire più versioni della stessa funzione, a seconda dei tipi che passi (rigorosamente, si tratta di più funzioni con lo stesso nome, distinte dal caso digitato dinamicamente sopra)

  • Un linguaggio con il polimorfismo di tipo (come i linguaggi orientati agli oggetti con ereditarietà) può definire un "Numero" di superclasse con sottoclassi per valori interi e in virgola mobile e quindi definire le funzioni matematiche in termini di questa classe. Questo approccio ha molta della flessibilità dell'approccio linguistico dinamico, pur mantenendo la severità dell'approccio statico o sovraccarico di funzione.

Go non ha nessuna di queste funzionalità, tuttavia.

    
risposta data 02.02.2013 - 02:43
fonte

Leggi altre domande sui tag