Как получить сводную информацию о системных задачах с помощью top без использования top?

То, что вы видите в своем ответе от awk, в основном является шумом.

Мы можем сравнить числа с bc небольшой утилитой (около 80 КБ), предназначенной для вычислений с произвольной точностью:

$ calc(){ awk "BEGIN{print $*}"; }
$ math='56777654409823*4674990588446667952594759939814064128'
$ bc <<<"$math"; calc "$math"
265434999999999978394292482412066060207814915129344
265434999999999985120999032855606532558652107128832

265434999999999978394292482412066060207814915129344 2654349999999999 85120999032855606532558652107128832

Обратите внимание, что совпадают только первые ~16 десятичных цифр, что является точностью двойной точности (64 бита) математики с плавающей запятой.

Да, gawk может выполнять математические вычисления с произвольной точностью, но только если они скомпилированы в программу и программа вызывается с опцией -M .

Вы должны вызывать gawk как:

calc(){ awk -M "BEGIN{print $*}"; }     

Вместо того, чтобы проверять несколько деталей с помощью awk или gawk, используйте:


Используйте bc

bc — это утилита, используемая для выполнения математических операций с произвольной точностью:

bc <<<'56777654409823*4674990588446667952594759939814064128'
265434999999999978394292482412066060207814915129344

Вычислите пи до 200 цифр (в 4 раза больше арктангенса 1):

$ bc <<<"scale=200;4*a(1)"
3.141592653589793238462643383279502884197169399375105820974944592307\
81640628620899862803482534211706798214808651328230664709384460955058\
223172535940812848111745028410270193852110555964462294895493038196

используйте реальный расчет:

После определенной вами функции вы увидите этот список, если вы напишете:

$ type -a calc
calc is a function
calc () { awk -M "BEGIN{print $*}"; }
calc is /usr/bin/calc

просто отмените определение функции:

$ unset -f calc
$ type calc
calc is /usr/bin/calc

Там вы могли бы сделать:

$ calc '2* 3'
6

$ calc '2 ^ 127 - 1'   # mersene prime.
170141183460469231731687303715884105727

$ calc '56777654409823*4674990588446667952594759939814064128'
         265434999999999978394292482412066060207814915129344

Это точно такой же ответ от bc:

$ math='56777654409823*4674990588446667952594759939814064128'
$ bc <<<"$math"; echo $(calc "$math")
265434999999999978394292482412066060207814915129344
265434999999999978394292482412066060207814915129344

1
25.11.2017, 20:31
0 ответов

Теги

Похожие вопросы