Falsche Ergebnisse beim Vergleich zweier Zahlen mit bc (bash)

569
juan monti

Ich bin auf einen Fehler gestoßen, wahrscheinlich einen Fehler bc. Ich habe es gefunden, als ich versuchte, zwei Zahlen in einem Skript in Bash zu vergleichen. Es stellt sich heraus, dass wenn ich tue:

echo "1.1E-2<1.1E-1" | bc -l 

Es wird 1 zurückgegeben (wie erwartet).

Aber wenn ich das zum Beispiel mache:

echo "2.1E-2<1.1E-1" | bc -l 

Es gibt 0 zurück, wenn es 1 zurückgeben soll (weil 0,021 kleiner als 0,11 ist).

Ich verwende bc Version 1.06.95 mit kubuntu 14.04

Hat jemand ein ähnliches Ergebnis gefunden? Kann sich jemand eine Problemumgehung vorstellen?

1

2 Antworten auf die Frage

3
choroba

bc Exponentialschreibweise nicht verstehen.

Wahrscheinlich interpretiert es "E" als Hex-Ziffer, aber in längeren Zahlen scheint es in 9 (Bug?) Und ähnlich für andere Hex-Ziffern zu übersetzen:

bc -l <<< E-4 # 14 - 4 10  bc -l <<< 1E-1 # 19 - 1 18  bc -l <<< F.4E2 9.492 
1
Hastur

Ihre Problemumgehung

 echo "2.1*10^-2<1.1*10^-1" | bc -l 

Wenn Sie die Ausgabe einer anderen Datei umwandeln möchten, können Sie etwas Ähnliches tun

 echo "2.1E-2<1.1E-1" | sed 's/E/*10^/g' | bc -l 

wo mit sedIhnen zu ersetzen gehen Emit, *10^dass akzeptiert wirdbc