كيف يمكنني منع كولومبيا البريطانية من تقسيم الخطوط؟

StackOverflow https://stackoverflow.com/questions/4282246

  •  28-09-2019
  •  | 
  •  

سؤال

أنا استخدم bc من نص Bash إلى القيام ببعض الرياضيات السريعة والمتسقة ، ولكن عندما أصطدم بالمقياس ، يبدأ تقسيم الخطوط علي:

pax> echo 'scale=200 ; 1 / 4' | bc
.2500000000000000000000000000000000000000000000000000000000000000000\
00000000000000000000000000000000000000000000000000000000000000000000\
00000000000000000000000000000000000000000000000000000000000000000

pax> num="$(echo 'scale=200 ; 1 / 4' | bc )" ; echo $num
.2500000000000000000000000000000000000000000000000000000000000000000\ 00000 ...

كيف يمكنني منع هذا من الحدوث حتى أتمكن من الحصول على الرقم دون أي تقسيم؟ توثق صفحة الرجل هذا السلوك ولكن لا يبدو أنها تعطي أي خيارات لتغييره.


في الواقع ، سأتراجع وأخبرك عن مصدر الطلب في حالة حدوث حل أفضل. أحتاج إلى مجموعة من الأوتار في C تعادل القيم 2, ، على طول الطريق ل:

static char *str[] = {
    "1.00000000 ... 000",     // 1/1 to 150 fractional places.
    "0.50000000 ... 000",     // 1/2
    "0.25000000 ... 000",     // 1/4
    "0.12500000 ... 000",     // 1/8
    : : :
    "0.00000000 ... 004",     // 1/(2^256)
};

لا يهمني اللغة التي تنشئها الصفيف ، سأقوم فقط بأخذ الإخراج وسدده في رمز C الخاص بي. أنا بحاجة إلى الدقة.

هل كانت مفيدة؟

المحلول

على الأقل على نظامي ، يتحكم متغير بيئة BC_Line_Length في المدة التي تستغرقها خطوط الإخراج:

$ echo 'scale=200; 1/4' | BC_LINE_LENGTH=9999 bc
.25000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

نصائح أخرى

localhost:~ slott$ python -c 'print "{0:.200f}".format( 1./4. )'
0.25000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000


localhost:~ slott$ python -c 'import decimal; print 1/decimal.Decimal( 2**256 )'
8.636168555094444625386351863E-78

import decimal
for i in range(256):
    print "{0:.150f}".format(1/decimal.Decimal(2**i))

هذه هي القيم الخام.

إذا كنت ترغب في إنشاء بناء جملة C المناسب ، فاستخدم شيئًا كهذا.

def long_string_iter():
    for i in range(256):
        yield i, "{0:.150f}".format(1/decimal.Decimal(2**i))

def c_syntax( string_iter ):
   print "static char *str[] = {"
   for i, value in string_iter():
       print '    "{0}", // 1/{1}'.format( value, i )
   print "};"

قد يفعل ما تريد.

% echo 'scale=200; 1/4' | bc | tr -d '\n' | tr -d '\\'
.25000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top