2016-04-24 5 views
0

Ich habe ein Programm, das eine Matrix mit sehr kleinen Werten ausgibt. Ein Beispiel für meine Matrix istVergleichen Sie kleine Werte mit Null mit spezifischer Genauigkeit

0.00000000000000004 0.12300000000000000 

0.00000000011111114 0.00000000000038544 

Was würde ich jeden Wert mit zero tun vergleichen ist und akzeptiert es zero mit spezifischer Genauigkeit zu sein, das ist 9 Dezimalstellen. Mit anderen Worten, wenn eine Zahl 9 zeros als erste Dezimalwerte hat, möchte ich sie als zero betrachten, sonst nicht.

Ich habe viel gesucht, aber wirklich nichts darüber gefunden. Irgendwelche Ideen?

+3

Vergleichen Sie '-1e-9 <= f <= 1e-9'? – MicroVirus

+0

@MicroVirus ja das hat funktioniert, vielen Dank !! Ich habe den richtigen Teil deines Zustandes benutzt, 'f <= 1e-9'. Können Sie erklären, was der linke Teil, -1e-9 <= f, überprüft? – Marievi

+0

@Marievi: '-1e-9' hat 9 Nullen als erste Dezimalwerte !!! –

Antwort

5

Wie ich in meinem Kommentar erwähnt, Sie einfach den Schwimmer f über -1e-9 < f < 1e-9 vergleichen.

Sie benötigen sowohl die positive als auch die negative Grenze, um sicherzustellen, dass es für positive und negative Zahlen richtig funktioniert. Sie verwenden 1e-9 und nicht 1e-10, denn wenn eine Zahl kleiner als 1e-9 ist, eine Zahl mit 8 Dezimalstellen 0, dann hat sie 9 Dezimalstellen oder mehr Null.

Beachten Sie, dass aufgrund der Rundung von 1e-9 beim Übergang von Dezimal zu Binär möglicherweise Rundungsfehler auftreten.

+1

Vielen Dank @MicroVirus !! – Marievi

+0

Gern geschehen :) – MicroVirus

2

Meine Idee ist ähnlich, was @MicroVirus in seinem Kommentar erwähnt hat. Sie können einfach auf eine bestimmte Anzahl vergleichen:

if(num < 1E-9 && num > -1E-9) 
    num = 0; 

oder

if(num * 1E9 < 1 && num * 1E9 > -1) 
    num = 0; 
+3

Scheint angebracht, dem @ MicroVirus-Kommentar zumindest einen Kredit zu geben. –

+1

@barakmanos Wir hatten zufällig die gleiche Idee. Jedenfalls bearbeitet. –

Verwandte Themen