View Single Post
Old 16-04-2010, 11:41   #3
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da VioletFairy Guarda i messaggi
Se faccio una cosa semplicissima come
Codice:
        var n : Number = 0.1;
        var m : Number = 0.0;
        println("n = {n}");
        for (i in [1..10]){
            m = m + n;
            println("m = {m}");
        }
ottengo questo output:

n = 0.1
m = 0.1
m = 0.2
m = 0.3
m = 0.4
m = 0.5
m = 0.6
m = 0.70000005
m = 0.8000001
m = 0.9000001
m = 1.0000001
L'approssimazione è dovuta al fatto che la rappresentazione di un numero con parte decimale in un computer deve fare i conti con la quantità di bit messa a disposizione per il dato tipo utilizzato per rappresentarlo (in Java, float o double).

Ad esempio questo sorgente Java:
Codice:
public class LiteralDouble
{
    public static void main(String... args) {
        doLiteralPrimitive1();
        doLiteralPrimitive2();
    }

    private static void doLiteralPrimitive1() {
        System.out.println("Literal double Primitive");
        double n = 0.1;
        double m = 0.0;
        System.out.println("n = "+n);
        for (int i=0; i<10; i++) {
            m += n;
            System.out.println("m = "+m);
        }
    }

    private static void doLiteralPrimitive2() {
        System.out.println("Literal float Primitie");
        float n = 0.1f;
        float m = 0.0f;
        System.out.println("n = "+n);
        for (int i=0; i<10; i++) {
            m += n;
            System.out.println("m = "+m);
        }
    }

}
Produce questo output:
Quote:
Literal double Primitive
n = 0.1
m = 0.1
m = 0.2
m = 0.30000000000000004
m = 0.4
m = 0.5
m = 0.6
m = 0.7
m = 0.7999999999999999
m = 0.8999999999999999
m = 0.9999999999999999
Literal float Primitive
n = 0.1
m = 0.1
m = 0.2
m = 0.3
m = 0.4
m = 0.5
m = 0.6
m = 0.70000005
m = 0.8000001
m = 0.9000001
m = 1.0000001
Per il punto (2) prova, quando cambi canzone, a riassegnare il volume al valore desiderato: comunque non saprei da cosa è causato il comportamento anomalo (ammesso che lo sia: non è che il valore del volume di riproduzione è una proprietà di una canzone, e se non lo valorizzi esplicitamente viene inizializzato dalla libreria/framework a 0.5 come valore di default?)

Ciao
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 16-04-2010 alle 11:46.
banryu79 è offline   Rispondi citando il messaggio o parte di esso