Domande frequenti - Calc: problema di precisione

    From The Document Foundation Wiki
    < Faq‎ | Calc
    This page is a translated version of the page Faq/Calc/Accuracy and the translation is 75% complete.
    Other languages:


    Problema di precisione intrinseco

    Calc, proprio come la maggior parte degli altri software per fogli di calcolo, utilizza le funzionalità matematiche in virgola mobile disponibili sull'hardware. Dato che la maggior parte dell'hardware contemporaneo utilizza l'aritmetica binaria in virgola mobile con precisione limitata definita in IEEE 754, molti numeri decimali, incluso il semplice 0,1, non possono essere rappresentati con precisione in Calc (che utilizza internamente numeri a doppia precisione a 64 bit). I calcoli con quei numeri comportano necessariamente errori di arrotondamento e questi si accumulano ad ogni calcolo. Questo non è un bug, ma è previsto e attualmente inevitabile senza l'utilizzo di calcoli complessi nel software, che comporterebbe penalizzazioni inadeguate delle prestazioni, e quindi è fuori discussione. Gli utenti devono tenerne conto e utilizzare arrotondamenti e confronti con epsilon, se necessario.

    Un esempio:

    A
    1 31000.99
    2 32000.12
    3 =A1-A2

    Ciò risulterà in -999,129999999997 in A3, invece del previsto -999,13 (potrebbe essere necessario aumentare le posizioni decimali mostrate nel formato cella per vederlo).

    A causa della specifica rappresentazione del tempo in Calc, questo vale anche per tutti i calcoli che coinvolgono i tempi. Ad esempio, nell'esempio seguente, le celle A1 e A2 mostrano i dati di data+ora inseriti (in formato ISO 8601):

    A
    1 2020-04-13 12:18:00
    2 2020-04-13 12:08:00
    3 =A1-A2

    La cella A3 mostrerà 00:09:59.999999 invece del previsto 00:10:00.000000 se formattata utilizzando la stringa di formato [HH]:MM:SS.000000. Ciò accade nonostante siano stati utilizzati solo numeri interi di ore e minuti, perché internamente, qualsiasi ora è una frazione di un giorno, le 12:00 (mezzogiorno) sono rappresentate come 0,5. I dati in A1 sono rappresentati internamente come 43934.5125 e in A2 come 43934.5055555555591126903891563 (che non è una rappresentazione esatta della data e ora immessa, che sarebbe 43934.505555555555555555...). La loro sottrazione risulta in 0.00694444443287037, un valore leggermente inferiore al previsto 0.00694444444444..., ovvero 10 minuti.

    Order of magnitude between operands

    The maximum order of magnitude between operands is lower than 10^15 (1015). This is not related to the display format for the cell.

    For instance, when performing 1E+9 + 1E-7 you might not get the result you are expecting, since 9 - (-7) = 16 > 15. On the other hand, performing 1E+8 + 1E-6 will indeed result in 100000000.000001 (you might need to increase shown decimal places in cell format to see this).

    Vedete anche

    Segnalibri correlati raccolti da erAck