Bc (bash) के साथ दो संख्याओं की तुलना करने पर गलत परिणाम


1

मैंने एक त्रुटि का सामना किया है, शायद एक बग में bc। मुझे इसका सामना तब करना पड़ा जब किसी स्क्रिप्ट पर दो नंबर की तुलना बैश में करने की कोशिश की गई। यह पता चला है कि जब मैं करता हूं:

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

यह 1 (जैसा कि अपेक्षित) देता है।

लेकिन जब मैं इसे निर्वासन के लिए करता हूं:

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

यह 0 देता है, जब इसे 1 वापस करना चाहिए (क्योंकि 0.021 0.11 से छोटा है)।

मैं kubuntu 14.04 के साथ bc संस्करण 1.06.95 का उपयोग कर रहा हूं

क्या किसी को एक समान परिणाम मिला है? क्या कोई वर्कअराउंड के बारे में सोच सकता है?

जवाबों:


3

bc घातीय संकेतन को नहीं समझता है।

यह शायद "ई" को हेक्स अंक के रूप में व्याख्या करता है, लेकिन अधिक संख्या में, यह इसे 9 (बग?) पर अनुवाद करने लगता है, और इसी तरह अन्य हेक्स अंकों के लिए:

bc -l <<< E-4    # 14 - 4
10

bc -l <<< 1E-1   # 19 - 1
18

bc -l <<< F.4E2
9.492

1

आपका वर्कअराउंड

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

यदि आप जिस केस को दूसरी फाइल के आउटपुट में बदलना चाहते हैं, आप उसी के अनुरूप कुछ कर सकते हैं

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

जहां sedआप के Eसाथ विकल्प के साथ जाना है *10^कि द्वारा स्वीकार किया जाता हैbc

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.