Ein anderer Entwickler hat mir einen Algorithmus gegeben, der eine Reihe von Strings zurückgibt, die doppelte Strings enthalten. Ich baue Komponententests gegen diese String-Ausgänge. Ungefähr 80% der Zeit, die ich meine Unit-Tests laufen sie alle bestanden. In den anderen 20% der Zeit treten geringfügige Abweichungen im doppelten Teil der zurückgegebenen Saiten auf. Zum Beispiel:Geringfügige Variation bei Doppelberechnungen zwischen Läufen
Expected: ((B,D),(C,A)); : 0.05766153477579324
Found: ((B,D),(C,A)); : 0.05766153477579325
Expected: (B,(C,(A,D))); : 0.0017518688483315935
Found (B,(C,(A,D))); : 0.001751868848331593
Ich weiß, dass doppelte Berechnungen ungenau sein können, aber ich habe nie davon gehört, dass sie Varianten sind. Der Autor des Algorithmus versichert mir, dass der Algo deterministisch ist. Die Art und Weise, dass das Doppel zuStringed ist, ist:
for(Tree gt: geneTrees){
double prob = probList.next();
total += prob;
result.append("\n" + gt.toString() + " : " + prob);
}
Ich bin bei ein wenig Verlust erklären, wie diese Variation möglich ist. Irgendwelche Ideen?
Können Sie die String-Eingänge einzuloggen, um die gleichen Eingaben zwischen den Läufen erhalten zu gewährleisten, * in die gleiche Reihenfolge *? –
Um zu sehen, wie viel Variation eine andere Reihenfolge machen kann http://vanillajava.blogspot.co.uk/2012/03/differences-results-summing-double.html Ich füge 1001 Werte in zufälliger Reihenfolge hinzu und erzeuge über 1000 verschiedene Summen. ;) –