Domanda

Questa sembra una domanda meglio diretta a coloro che hanno una certa esperienza di programmazione piuttosto che solo utenti generali di Excel, quindi la mia domanda qui invece di Superuser.

Esiste un modo, preferibilmente attraverso una funzione, per restituire Epsilon (cioè il numero diverso da zero più piccolo rappresentabile nei calcoli di Excel)? Se non è recuperabile attraverso una funzione, esiste un modo rapido per calcolarla attraverso una funzione compatta?

Per essere chiari, non sto cercando una soluzione basata su VBA, vorrei una soluzione basata su formula/ foglio di calcolo Excel che non richiede macro in esecuzione.

Le mie ricerche online hanno principalmente discusso su come visualizzare il simbolo Epsilon.

Grazie.

È stato utile?

Soluzione

Excel opera sempre con i doppi IEEE.

Un'espressione non VBA che ti porterà il numero di punto galleggiante non denomalizzato più piccolo maggiore di 0 è

=2^-1022

Machine Epsilon, d'altra parte, è il numero più piccolo che può essere aggiunto a 1 e provoca un numero maggiore di 1. Per la doppia precisione è dato da

=2^-52

Altri suggerimenti

Microsoft definisce i limiti di precisione del numero di punto mobile per XL. Il numero di punti galleggianti più piccolo è elencato come 2.2250738585072E-308 nel ID articolo di supporto Microsoft: 78113. Quando inserisco questo numero nel mio foglio di calcolo, in realtà memorizza un punto galleggiante 0, ma se memorizzi 2.2250738585073E-308 (ho aggiunto 1 alla cifra meno significativa) posso vedere tutte le cifre. Vedo che hai chiesto un Epsilon a macchina, ma dal momento che stai usando XL, quello che vedrai davvero è l'epsilon della libreria di punti mobili C/C ++. Vedere il Microsoft Developer Network XLFRegister (Modulo 1) Argomento.

Puoi scrivere una subroutine VBA come:

 Public Sub ComputeMachineEpsilon()
     Dim g, ex, eps As Double
     Dim i As Long
     g = 1
     i = 0
     Do
        i = i + 1
        g = g / 2
        ex = g * 0.98 + 1
        ex = ex - 1
        If ex > 0 Then eps = ex
     Loop While ex > 0

     MsgBox ("No. of Iterations " & i)
     MsgBox ("Machine Epsilon is " & eps)

    End Sub

Ma sulla mia macchina dà 2.22e-16, ed è strano perché posso scrivere =2^-113 in una cella e ottenere 9.62965E-35.

MODIFICARE:

=1*(0,5-0,4-0,1)

Ottengo: -2,78e -17

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top