Quote:
Originariamente inviato da VioletFairy
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