Perché l'espressione exp (i * pi) restituisce il risultato sbagliato in GNU Octave?


8

Ho iniziato a studiare GNU Octave oggi e ho provato la prima espressione fornita nel manuale

exp(i*pi)

Il risultato è

ans = -1.0000e+000 + 1.2246e-016i

E sembra che anche la GNU Scientific Library dia risultati simili.

Quindi si tratta di un bug di Ottava o di problemi generali del software di analisi numerica (il software di valutazione simbolica fornirà sicuramente una risposta esatta)?


2
Sembra che l'ottava sia primariamente destinata all'analisi numerica. Mathematica ti darebbe sicuramente una risposta migliore ...: P
sto

@Giacomo: lo so. Mi chiedo solo se tutto il software analitico numerico valga tale numero o solo GNU Octave.
Siyuan Ren,

@Karsus Ren questo non è in realtà un bug software, ma hardware. È una limitazione intrinseca del tentativo di valutare espressioni con numeri irrazionali sull'hardware con una quantità limitata di spazio di archiviazione per un singolo numero.
Breakthrough

Risposte:


8

Questo non è un bug con nessuno dei due, ma a causa del modo in cui i computer eseguono operazioni in virgola mobile. C'è una quantità limitata di precisione con cui qualsiasi computer può operare, e quindi a volte vedrai anomalie come questa. Sebbene sia possibile scrivere software in grado di gestirlo, occorrerebbe molto più tempo di calcolo e aumenterebbe drasticamente i requisiti di memoria.

Se lo guardi, e ^ (i * pi) restituisce -1 + 1,2x10 ^ -16i. Come puoi vedere, la componente immaginaria è estremamente piccola (la maggior parte la considererebbe trascurabile, poiché è 16 ordini di grandezza più piccola della parte reale). Questo componente è introdotto da errori di arrotondamento e precisione, sia con il calcolo stesso, sia dal valore memorizzato di pi poiché è irrazionale (vedere questo collegamento per un altro esempio che tratta di numeri irrazionali).

Se questo errore di calcolo è inaccettabile, è necessario esaminare i pacchetti matematici che eseguono analisi simboliche anziché numeriche o che utilizzano numeri a virgola mobile ad alta precisione . Le avvertenze di questi sono che aumenteranno drasticamente i requisiti di memoria, e l'analisi simbolica è spesso molto più lenta. Inoltre, numeri di precisione più elevati riducono semplicemente l'entità degli errori di arrotondamento / precisione, non li eliminano.


1
Ho solo bisogno di una conferma che questo è il comportamento comune del software di analisi numerica.
Siyuan Ren,

@Karsus Ren è in realtà il comportamento di questo tipo di software con precisione abbastanza elevata . So che sembra controintuitivo, ma numeri di precisione più bassi non restituiscono queste anomalie così spesso. Vedi questo articolo di Microsoft per maggiori dettagli, ma ricorda, questo problema è una combinazione sia del codice sorgente che dell'architettura del compilatore / destinazione. Inoltre, questo articolo di Wikipedia ha alcune buone informazioni di base sul problema.
Sfondamento

1
Il problema di fondo è che la costante di Octave pinon è la costante matematica π, ma una stretta approssimazione in virgola mobile. La expfunzione aggiunge un altro piccolo errore. Un sistema che funziona con espressioni simboliche potrebbe calcolare exp(i*pi)esattamente; Octave non è un tale sistema.
Keith Thompson l'
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.