Metodi della libreria matematica nel linguaggio di programmazione Go di Google


9

Ho programmato su Google Golang e mi sono divertito a causa della sua brevità, ma trovo sorprendente che quasi tutti i suoi metodi di libreria standard di matematica siano per il tipo a virgola mobile. C'è qualche motivo particolare per cui questi metodi non esistono per gli ints?

Risposte:


9

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

La risposta più lunga è che in un linguaggio tipicamente statico senza polimorfismo o sovraccarico di funzioni, come Go (o C), è necessario accontentarsi di un tipo per una funzione da prendere e tornare in anticipo e una volta che si ha a che fare con tipi specifici nella tua libreria matematica, ci sono operazioni molto più interessanti sui numeri in virgola mobile rispetto ai numeri interi. Per scegliere alcuni esempi

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

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

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

Nota che questo non è oneroso come potrebbe sembrare se i tuoi valori di input sono numeri interi: un valore integrale può essere convertito in un valore in virgola mobile con un semplice typecast e, soprattutto, in modo accurato.

Questa è la storia di lingue 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 intero.

  • Un linguaggio con sovraccarico di funzioni può fornire più versioni della stessa funzione, a seconda dei tipi passati (rigorosamente, si tratta di più funzioni con lo stesso nome, distinte dal caso tipicamente dinamizzato sopra)

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

Go non ha nessuna di queste funzionalità, tuttavia.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.