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

Xorg обнаружит автоматически корректный драйвер для Вашей видеокарты (который я думаю, Radeon). Используйте тестирование Debian, Ваш чипсет является слишком новым для стабильной версии.

308
24.12.2017, 17:26
18 ответов

Существует много опций!!!

Сводка

$ printf %.10f\\n "$((10**9 * 20/7))e-9"   # many shells. Not mksh.
$ echo "$((20.0/7))"                       # (ksh93/zsh/yash, not bash)
$ awk "BEGIN {print (20+5)/2}"
$ zcalc
$ bc <<< 20+5/2
$ bc <<< "scale=4; (20+5)/2"
$ dc <<< "4 k 20 5 + 2 / p"
$ expr 20 + 5
$ calc 2 + 4
$ node -pe 20+5/2  # Uses the power of JavaScript, e.g. : node -pe 20+5/Math.PI
$ echo 20 5 2 / + p | dc 
$ echo 4 k 20 5 2 / + p | dc 
$ perl -E "say 20+5/2"
$ python -c "print(20+5/2)"
$ python -c "print(20+5/2.0)"
$ clisp -x "(+ 2 2)"
$ lua -e "print(20+5/2)"
$ php -r 'echo 20+5/2;'
$ ruby -e 'p 20+5/2'
$ ruby -e 'p 20+5/2.0'
$ guile -c '(display (+ 20 (/ 5 2)))'
$ guile -c '(display (+ 20 (/ 5 2.0)))'
$ slsh -e 'printf("%f",20+5/2)'
$ slsh -e 'printf("%f",20+5/2.0)'
$ tclsh <<< 'puts [expr 20+5/2]'
$ tclsh <<< 'puts [expr 20+5/2.0]'
$ sqlite3 <<< 'select 20+5/2;'
$ sqlite3 <<< 'select 20+5/2.0;'
$ echo 'select 1 + 1;' | sqlite3 
$ psql -tAc 'select 1+1'
$ R -q -e 'print(sd(rnorm(1000)))'
$ r -e 'cat(pi^2, "\n")'
$ r -e 'print(sum(1:100))'
$ smjs
$ jspl

Подробнее

Оболочки

Можно использовать расширение арифметики POSIX для целочисленной арифметики echo "$((...))":

$ echo "$((20+5))"
25
$ echo "$((20+5/2))"
22

Довольно портативный (ash dash yash bash ksh93 lksh zsh):
Используя printf способность распечатать плавания мы можем расширить большинство оболочек, чтобы сделать математические операции с плавающей точкой хотя с ограниченным диапазоном (не больше, чем 10 цифр):

$ printf %.10f\\n "$((1000000000 *   20/7  ))e-9"
2.8571428570

ksh93, yash и zsh действительно поддерживайте плавания здесь:

$ echo "$((1.2 / 3))"
0.4

только ksh93 (непосредственно) и zsh загрузка библиотеки mathfunc здесь:

$ echo "$((4*atan(1)))"
3.14159265358979324

(zsh должен загрузиться zmodload zsh/mathfunc получить функции как atan ).


В интерактивном режиме с zsh:

$ autoload zcalc
$ zcalc
1> PI/2
1.5708
2> cos($1)
6.12323e-17
3> :sci 12
6.12323399574e-17

С (t) csh (только целое число):

% @ a=25 / 3; echo $a
8

В rc семейство оболочек, akanga тот с арифметическим расширением:

; echo $:25/3
8

POSIX toolchest

bc (см. ниже для интерактивного режима), руководство здесь

Мнемосхема: лучший калькулятор (хотя b на самом деле для основного).

$ echo 20+5/2 | bc
22
$ echo 'scale=4;20+5/2' | bc
22.5000

(числа произвольной точности поддержек)


до н.э интерактивный режим:

$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
5+5
10

2.2+3.3
5.5

Решение порыва, expr (никакой интерактивный режим):

$ expr 20 + 5
25
$ expr 20 + 5 / 2
22

Решение Joshua: awk (никакой интерактивный режим):

$ calc() { awk "BEGIN{print $*}"; }
$ calc 1/3
0.333333

Другие более или менее портативные инструменты

Решение Arcege, dc (интерактивный режим: dc):

Который является еще большим количеством забавы, так как она работает обратной польской записью.

$ echo 20 5 2 / + p | dc 
22
$ echo 4 k 20 5 2 / + p | dc 
22.5000

Но не как практичный, если Вы не работаете с обратной польской записью много.

Отметьте это dc предшествует bc и bc был исторически реализован как обертка вокруг dc но dc не был стандартизирован POSIX


DQdims's calc (необходимый sudo apt-get install apcalc):

$ calc 2 + 4
6

Интерпретаторы языка общего назначения:

решение manatwork, node (интерактивный режим: node; не нужная функция вывода):

$ node -pe 20+5/2  # Uses the power of JavaScript, e.g. : node -pe 20+5/Math.PI
22.5

Perl (интерактивный режим: perl -de 1):

$ perl -E "say 20+5/2"
22.5

Python (интерактивный режим: python; не нужная функция вывода):

$ python -c "print(20+5/2)"
22 # 22.5 with python3
$ python -c "print(20+5/2.0)"
22.5

Также числа произвольной точности поддержек:

$ python -c 'print(2**1234)'
295811224608098629060044695716103590786339687135372992239556207050657350796238924261053837248378050186443647759070955993120820899330381760937027212482840944941362110665443775183495726811929203861182015218323892077355983393191208928867652655993602487903113708549402668624521100611794270340232766099317098048887493809023127398253860618772619035009883272941129544640111837184

Если Вы имеете clisp установленный, можно также использовать польскую запись:

$ clisp -x "(+ 2 2)"

Решение Marco, lua (интерактивный режим: lua):

$ lua -e "print(20+5/2)"
22.5

PHP (интерактивный режим: php -a):

$ php -r 'echo 20+5/2;'
22.5

Ruby (интерактивный режим: irb; не нужная функция вывода):

$ ruby -e 'p 20+5/2'
22
$ ruby -e 'p 20+5/2.0'
22.5

Хитрость (интерактивный режим: guile):

$ guile -c '(display (+ 20 (/ 5 2)))'
45/2
$ guile -c '(display (+ 20 (/ 5 2.0)))'
22.5

Сленг (интерактивный режим: slsh; не нужная функция вывода, просто a ; разделитель):

$ slsh -e 'printf("%f",20+5/2)'
22.000000
$ slsh -e 'printf("%f",20+5/2.0)'
22.500000

Tcl (интерактивный режим: tclsh; не нужная функция вывода, но expr ):

$ tclsh <<< 'puts [expr 20+5/2]'
22
$ tclsh <<< 'puts [expr 20+5/2.0]'
22.5

Оболочки JavaScript:

$ smjs
js> 25/3
8.333333333333334
js>

$ jspl
JSC: 25/3

RP: 8.33333333333333
RJS: [object Number]
JSC:
Good bye...

$ node
> 25/3
8.333333333333334
>

Различный SQL:

SQLite (интерактивный режим: sqlite3):

$ sqlite3 <<< 'select 20+5/2;'
22
$ sqlite3 <<< 'select 20+5/2.0;'
22.5

MySQL:

mysql -BNe 'select 1+1'

PostgreSQL:

psql -tAc 'select 1+1

Опции _The на mysql и пост-ГРЭС останавливают 'изображение' искусства ASCII!

Специализированные ориентированные на математику языки:

R в простом режиме - позволяет, генерируют 1 000 Нормальных случайных чисел и получают стандартное отклонение и печатают его

$ R -q -e 'print(sd(rnorm(1000)))'
> print(sd(rnorm(1000)))
[1] 1.031997

R использование littler сценария - позволяет пи печати, в квадрате

$ r -e 'cat(pi^2, "\n")'
9.869604
$  r -e 'print(sum(1:100))'
[1] 5050

PARI/GP, обширная компьютерная система алгебры для теории чисел, линейной алгебры и многих других вещей

$ echo "prime(1000)"|gp -q
7919                        // the 1000th prime
$ echo "factor(1000)" | gp -q
[2 3]
[5 3]                       // 2^3*5^3
$ echo "sum(x=1,5,x)" | gp -q
15                          // 1+2+3+4+5

Октава GNU (высокоуровневый интерпретируемый язык, прежде всего, предназначенный для числовых вычислений)

Также комплексные числа поддержек:

$ octave
>> 1.2 / 7
ans =  0.17143
>> sqrt(-1)
ans =  0 + 1i

Julia, высокоэффективный язык и интерпретатор для научных и числовых вычислений.

Неинтерактивная опция:

$ julia -E '2.5+3.7'
6.2
421
27.01.2020, 19:26
  • 1
    и до н.э интересен: whatis bc -> An arbitrary precision calculator language Интересный!Спасибо! –  Michael Durrant 14.06.2012, 17:48
  • 2
    @MichaelDurrant Вы могли повторно пересмотреть свои редактирования, я, должно быть, отклонил по ошибке? –  lgarzo 14.06.2012, 18:06
  • 3
    Существует также dc, который является еще большим количеством забавы, так как она работает обратной польской записью. echo 20 5 + p | dc Но не как практичный, если Вы не работаете с обратной польской записью много. –  Arcege 14.06.2012, 18:11
  • 4
    Как вариация на до н.э приближаются, я добавил следующую функцию (что я нашел на stackexchange где-нибудь) в мой .bashrc файл. Я могу просто ввести calc 2+3 и добраться 5. ## Command line calculator calc () { bc -l <<< "$@" } –  Joe 16.06.2012, 21:59
  • 5
    @Chris, рыба является движущейся целью. Они продолжают работать свое новое math встроенный (или независимо от того, что это называют теперь), поскольку мы говорим. Не стесняйтесь редактировать. Это не мой ответ, и это - общественная Wiki. –  Stéphane Chazelas 20.12.2017, 23:18

Существует много опций!!!

Сводка

$ printf %.10f\\n "$((10**9 * 20/7))e-9"   # many shells. Not mksh.
$ echo "$((20.0/7))"                       # (ksh93/zsh/yash, not bash)
$ awk "BEGIN {print (20+5)/2}"
$ zcalc
$ bc <<< 20+5/2
$ bc <<< "scale=4; (20+5)/2"
$ dc <<< "4 k 20 5 + 2 / p"
$ expr 20 + 5
$ calc 2 + 4
$ node -pe 20+5/2  # Uses the power of JavaScript, e.g. : node -pe 20+5/Math.PI
$ echo 20 5 2 / + p | dc 
$ echo 4 k 20 5 2 / + p | dc 
$ perl -E "say 20+5/2"
$ python -c "print(20+5/2)"
$ python -c "print(20+5/2.0)"
$ clisp -x "(+ 2 2)"
$ lua -e "print(20+5/2)"
$ php -r 'echo 20+5/2;'
$ ruby -e 'p 20+5/2'
$ ruby -e 'p 20+5/2.0'
$ guile -c '(display (+ 20 (/ 5 2)))'
$ guile -c '(display (+ 20 (/ 5 2.0)))'
$ slsh -e 'printf("%f",20+5/2)'
$ slsh -e 'printf("%f",20+5/2.0)'
$ tclsh <<< 'puts [expr 20+5/2]'
$ tclsh <<< 'puts [expr 20+5/2.0]'
$ sqlite3 <<< 'select 20+5/2;'
$ sqlite3 <<< 'select 20+5/2.0;'
$ echo 'select 1 + 1;' | sqlite3 
$ psql -tAc 'select 1+1'
$ R -q -e 'print(sd(rnorm(1000)))'
$ r -e 'cat(pi^2, "\n")'
$ r -e 'print(sum(1:100))'
$ smjs
$ jspl

Подробнее

Оболочки

Можно использовать расширение арифметики POSIX для целочисленной арифметики echo "$((...))":

$ echo "$((20+5))"
25
$ echo "$((20+5/2))"
22

Довольно портативный (ash dash yash bash ksh93 lksh zsh):
Используя printf способность распечатать плавания мы можем расширить большинство оболочек, чтобы сделать математические операции с плавающей точкой хотя с ограниченным диапазоном (не больше, чем 10 цифр):

$ printf %.10f\\n "$((1000000000 *   20/7  ))e-9"
2.8571428570

ksh93, yash и zsh действительно поддерживайте плавания здесь:

$ echo "$((1.2 / 3))"
0.4

только ksh93 (непосредственно) и zsh загрузка библиотеки mathfunc здесь:

$ echo "$((4*atan(1)))"
3.14159265358979324

(zsh должен загрузиться zmodload zsh/mathfunc получить функции как atan ).


В интерактивном режиме с zsh:

$ autoload zcalc
$ zcalc
1> PI/2
1.5708
2> cos($1)
6.12323e-17
3> :sci 12
6.12323399574e-17

С (t) csh (только целое число):

% @ a=25 / 3; echo $a
8

В rc семейство оболочек, akanga тот с арифметическим расширением:

; echo $:25/3
8

POSIX toolchest

bc (см. ниже для интерактивного режима), руководство здесь

Мнемосхема: лучший калькулятор (хотя b на самом деле для основного).

$ echo 20+5/2 | bc
22
$ echo 'scale=4;20+5/2' | bc
22.5000

(числа произвольной точности поддержек)


до н.э интерактивный режим:

$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
5+5
10

2.2+3.3
5.5

Решение порыва, expr (никакой интерактивный режим):

$ expr 20 + 5
25
$ expr 20 + 5 / 2
22

Решение Joshua: awk (никакой интерактивный режим):

$ calc() { awk "BEGIN{print $*}"; }
$ calc 1/3
0.333333

Другие более или менее портативные инструменты

Решение Arcege, dc (интерактивный режим: dc):

Который является еще большим количеством забавы, так как она работает обратной польской записью.

$ echo 20 5 2 / + p | dc 
22
$ echo 4 k 20 5 2 / + p | dc 
22.5000

Но не как практичный, если Вы не работаете с обратной польской записью много.

Отметьте это dc предшествует bc и bc был исторически реализован как обертка вокруг dc но dc не был стандартизирован POSIX


DQdims's calc (необходимый sudo apt-get install apcalc):

$ calc 2 + 4
6

Интерпретаторы языка общего назначения:

решение manatwork, node (интерактивный режим: node; не нужная функция вывода):

$ node -pe 20+5/2  # Uses the power of JavaScript, e.g. : node -pe 20+5/Math.PI
22.5

Perl (интерактивный режим: perl -de 1):

$ perl -E "say 20+5/2"
22.5

Python (интерактивный режим: python; не нужная функция вывода):

$ python -c "print(20+5/2)"
22 # 22.5 with python3
$ python -c "print(20+5/2.0)"
22.5

Также числа произвольной точности поддержек:

$ python -c 'print(2**1234)'
295811224608098629060044695716103590786339687135372992239556207050657350796238924261053837248378050186443647759070955993120820899330381760937027212482840944941362110665443775183495726811929203861182015218323892077355983393191208928867652655993602487903113708549402668624521100611794270340232766099317098048887493809023127398253860618772619035009883272941129544640111837184

Если Вы имеете clisp установленный, можно также использовать польскую запись:

$ clisp -x "(+ 2 2)"

Решение Marco, lua (интерактивный режим: lua):

$ lua -e "print(20+5/2)"
22.5

PHP (интерактивный режим: php -a):

$ php -r 'echo 20+5/2;'
22.5

Ruby (интерактивный режим: irb; не нужная функция вывода):

$ ruby -e 'p 20+5/2'
22
$ ruby -e 'p 20+5/2.0'
22.5

Хитрость (интерактивный режим: guile):

$ guile -c '(display (+ 20 (/ 5 2)))'
45/2
$ guile -c '(display (+ 20 (/ 5 2.0)))'
22.5

Сленг (интерактивный режим: slsh; не нужная функция вывода, просто a ; разделитель):

$ slsh -e 'printf("%f",20+5/2)'
22.000000
$ slsh -e 'printf("%f",20+5/2.0)'
22.500000

Tcl (интерактивный режим: tclsh; не нужная функция вывода, но expr ):

$ tclsh <<< 'puts [expr 20+5/2]'
22
$ tclsh <<< 'puts [expr 20+5/2.0]'
22.5

Оболочки JavaScript:

$ smjs
js> 25/3
8.333333333333334
js>

$ jspl
JSC: 25/3

RP: 8.33333333333333
RJS: [object Number]
JSC:
Good bye...

$ node
> 25/3
8.333333333333334
>

Различный SQL:

SQLite (интерактивный режим: sqlite3):

$ sqlite3 <<< 'select 20+5/2;'
22
$ sqlite3 <<< 'select 20+5/2.0;'
22.5

MySQL:

mysql -BNe 'select 1+1'

PostgreSQL:

psql -tAc 'select 1+1

Опции _The на mysql и пост-ГРЭС останавливают 'изображение' искусства ASCII!

Специализированные ориентированные на математику языки:

R в простом режиме - позволяет, генерируют 1 000 Нормальных случайных чисел и получают стандартное отклонение и печатают его

$ R -q -e 'print(sd(rnorm(1000)))'
> print(sd(rnorm(1000)))
[1] 1.031997

R использование littler сценария - позволяет пи печати, в квадрате

$ r -e 'cat(pi^2, "\n")'
9.869604
$  r -e 'print(sum(1:100))'
[1] 5050

PARI/GP, обширная компьютерная система алгебры для теории чисел, линейной алгебры и многих других вещей

$ echo "prime(1000)"|gp -q
7919                        // the 1000th prime
$ echo "factor(1000)" | gp -q
[2 3]
[5 3]                       // 2^3*5^3
$ echo "sum(x=1,5,x)" | gp -q
15                          // 1+2+3+4+5

Октава GNU (высокоуровневый интерпретируемый язык, прежде всего, предназначенный для числовых вычислений)

Также комплексные числа поддержек:

$ octave
>> 1.2 / 7
ans =  0.17143
>> sqrt(-1)
ans =  0 + 1i

Julia, высокоэффективный язык и интерпретатор для научных и числовых вычислений.

Неинтерактивная опция:

$ julia -E '2.5+3.7'
6.2
421
27.01.2020, 19:26

SQLite:

echo 'select 1 + 1;' | sqlite3 

MySQL:

mysql -e 'select 1 + 1 from dual;'

PostgreSQL:

psql -c 'select 1 + 1 as sum;'
3
27.01.2020, 19:26
  • 1
    Некоторая незначительная ценность деталей для упоминания: 1) from dual необходим Oracle, MySQL может select без from пункт. 2) PostgreSQL не требует псевдонима. 3) ; только требуется SQLite. 4) MySQL и PostgreSQL будут работать, только если они могут соединиться с сервером базы данных. 5) MySQL и PostgreSQL потянут таблицу ASCII-творчества вокруг результатов. Получить только значение: mysql -BNe 'select 1+1' и psql -tAc 'select 1+1. –  manatwork 16.06.2012, 18:00

Для консольных вычислений я использую concalc. (sudo aptitude install concalc)

После этого просто введите concalc и хит входит. Это не предоставит подсказку, но просто введет в Вашем вычислении (никакие пробелы) и совершит нападки, входят, и в следующую строку, это даст Вам числовое значение.

3
27.01.2020, 19:26

Для консольных вычислений я использую concalc. (sudo aptitude install concalc)

После этого просто введите concalc и хит входит. Это не предоставит подсказку, но просто введет в Вашем вычислении (никакие пробелы) и совершит нападки, входят, и в следующую строку, это даст Вам числовое значение.

3
27.01.2020, 19:26

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

$ pc '[i ** 2 for i in range(10)]'
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

сценарий:

#!/usr/local/bin/python3

import sys
import traceback
from codeop import CommandCompiler

compile = CommandCompiler()
filename = "<input>"
source = ' '.join(sys.argv[1:]) + '\n'

try:
    code = compile(source, filename) 
except (OverflowError, SyntaxError, ValueError):
    type, value, sys.last_traceback = sys.exc_info()
    sys.last_type = type
    sys.last_value = value
    if filename and type is SyntaxError:
        # Work hard to stuff the correct filename in the exception
        try:
            msg, (dummy_filename, lineno, offset, line) = value.args
        except ValueError:
            # Not the format we expect; leave it alone
            pass
        else:
            # Stuff in the right filename
            value = SyntaxError(msg, (filename, lineno, offset, line))
            sys.last_value = value
    lines = traceback.format_exception_only(type, value)
    print(''.join(lines))
else:
    if code:
        exec(code)
    else:
        print('incomplete')

К сожалению, я не помню, где я одолжил большую часть кода у, таким образом, я не могу процитировать его.

4
27.01.2020, 19:26
  • 1
    не был бы print(eval(' '.join(sys.argv[1:]))) то же самое? –  g.rocket 08.10.2014, 08:02
  • 2
    Вы используете молоток для удара мухи здесь –  ndemou 17.09.2017, 13:32
$> ghc -e '20 + 5'
25
it :: Integer

Также ghci, это - Компилятор Глазго-Haskell в интерактивном режиме (ghc --interactive, в противоположность ему, оценивая выражение с -e), делает для захватывающего "калькулятора":

$>ghci
GHCi, version 7.8.3: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> pi
3.141592653589793
Prelude> ceiling pi
4
Prelude> compare 1 2
LT
6
27.01.2020, 19:26
  • 1
    это ghc значение Глазго Компилятор Haskell? –  manatwork 15.06.2012, 10:32
  • 2
    , берущий передачу на программах, я должен установить, но благодарю. –  Michael Durrant 21.06.2012, 17:07

Я не могу верить для чтения "питания JavaScript" (но у меня был к upvote ответ для других частей, кроме жемчуга, конечно.

Практически, для простых случаев, где целочисленная арифметика достаточна, я использую $ здания ((...)) и рекомендую это. Еще, почти во всем эхе случаев "..." | до н.э достаточно.

Для некоторых арифметических операций как статистика, операций над матрицей и больше R лучший инструмент:

echo 25 + 5 | R --vanilla

и поскольку небольшие наборы данных и графический бросок далеко заканчивается, oocalc хорошая утилита.

4
27.01.2020, 19:26

Мне нравится разжигать Python и использовать его в качестве интерактивного калькулятора (но с другой стороны, я - Python программист).

10
27.01.2020, 19:26
  • 1
    я также! Python является моим швейцарским ножом –  Levon 15.06.2012, 02:47
  • 2
    у меня всегда есть одно окно в screen просто под управлением Python. –  Arcege 15.06.2012, 21:54
  • 3
    pythonpy является хорошим способом сделать это и другие вещи в синтаксисе Python, не имея необходимость разжигать интерактивную оболочку: py '3.2 * 5' => 16 –  RussellStewart 13.09.2014, 09:30
  • 4
    мне нравится Python, но это - время запуска, становится важным, если Вы просто хотите добавить два числа в нескольких местах Вашего сценария –  ndemou 17.09.2017, 13:30
  • 5
    @ndemou я сказал "интерактивный" калькулятор. Хотя также стоит отметить, что в какой-то момент при выполнении достаточно сложных вещей в сценарии исправность диктует Вас, используют что-то другое, чем удар (как Python). –  asmeurer 18.09.2017, 23:20

Можно использовать calc:

Если Вы просто входите calc без других аргументов это переходит к интерактивному режиму, где можно просто продолжать делать математику. Вы выходите из этого путем ввода выхода:

C-style arbitrary precision calculator (version 2.12.3.3)
Calc is open software. For license details type:  help copyright
[Type "exit" to exit, or "help" for help.]

; 2+4
6
; 3+5
8
; 3.4+5
8.4
; 2^4
16
; exit

Или Вы используете его с выражением как аргумент, и это предоставит ответ и затем выйдет

$calc 2 + 4
    6
$

calc подобно bc, Я точно так же, как путь это ведет себя как значение по умолчанию лучше

17
27.01.2020, 19:26
  • 1
    Вы не должны переходить к интерактивному режиму, если Вы особенно не хотите, например: calc -e '2+4; 3+5; 3.4+5; 2^4 печать 4 выходных строки, или просто calc -e 33+(3^3).. +1 мне нравится идея использовать что-то позвонившее 'calc' для калькулятора :) –  Peter.O 14.06.2012, 21:47
  • 2
    я только что понял что -e опция не нужна, когда существует только одно выражение... аккуратное!.. –  Peter.O 15.06.2012, 04:19

Вы могли использовать bc. Например,

$ echo "25 + 5" | bc
30

Кроме того, bc <<< 25+5 будет также работать.

Или в интерактивном режиме, если Вы хотите сделать больше, чем просто единственное простое вычисление:

$ bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
25 + 5
30

Реализация GNU bc печать, что информация о заголовке/авторском праве о запуске, когда и его stdin и stdout переходят к терминалу. Можно подавить его с (определенный для GNU) -q опция. Для получения дополнительной информации см. до н.э страницу справочника

18
27.01.2020, 19:26
  • 1
    +1 для обоих каналов (" | ") и опции интерактивного режима для бакалавра наук. Делает тот ctrl-d выходить? –  Michael Durrant 14.06.2012, 17:49
  • 2
    @MichaelDurrant Да, ^D добьется цели, как будет quit –  Levon 14.06.2012, 17:50

Никто еще не упомянул awk?

Используя функции оболочки POSIX и awk математическое питание, просто определите это (одна строка) функция:

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

Затем просто выполните вещи как calc 1+1 или calc 5/2

Примечание: Для создания функции всегда доступной добавьте его к ~/.bashrc (или файл запуска соответствующей оболочки)

Конечно, немного сценария, названного "calc" со следующим содержанием:

#!/bin/sh -
awk "BEGIN { print $* }"

мог также работать.

24
27.01.2020, 19:26
  • 1
    , Ничего себе, это является лучшим, даже плавания поддержек. Это работает, ничего не устанавливая! –  CMCDragonkai 04.06.2014, 05:40
  • 2
    Очень хороший, я хотел иметь плавающее сравнение, вот то, как я сделал это с Вашей справкой: a=0; b=0.0; if echo "$a" "$b" | awk '{ exit ($1 == $2) ? 0 : 1 }'; then echo 'equals'; else echo 'not equals'; fi –  Paul Tobias 01.12.2015, 08:55

Упомянутые решения хорошо для очень простых вычислений, но очень подверженные ошибкам. Примеры:

# without spaces expr 20+5 produces literally 20+5
expr 20+5
→ 20+5

# bc's result doesn't give the fractional part by default
bc <<< 9.0/2.0
→ 4

# expr does only integer
expr 9 / 2
→ 4

# same for POSIX arithmetic expansion
echo $((9/2))
→ 4

# bash arithmetic expansion chokes on floats
echo $((9.0/2.0))
→ bash: 9/2.0: syntax error: invalid arithmetic operator (error token is ".0")

# Most `expr` implementations also have problems with floats
expr 9.0 / 2.0
→ expr: non-integer argument

Синтаксическая ошибка как последние легко замечена, но целочисленные ответы с отброшенной частью плавающей могут легко остаться незамеченными и привести к неправильным результатам.

Вот почему я всегда использую язык сценариев как Lua для этого. Но можно выбрать любой язык сценариев, с которым Вы знакомы. Я просто использую Lua в качестве примера. Преимущества

  • знакомый синтаксис
  • знакомые функции
  • знакомые протесты
  • гибкий вход
  • пробелы обычно не имеют значения
  • вывод с плавающей точкой

Примеры:

lua -e "print(9/2)"
→ 4.5

lua -e "print(9 / 2)"
→ 4.5

lua -e "print(9.0/2)"
→ 4.5

lua -e "print (9 /2.)"
→ 4.5

lua -e "print(math.sqrt(9))"
→ 3
25
27.01.2020, 19:26
  • 1
    bcрезультатом не является целое число, просто округленное к scale, то, кто значение по умолчанию, 0. Так bc <<< 'scale=4;9.0/2.0' если Вы хотите дробную часть. –  manatwork 14.06.2012, 19:16
  • 2
    Спасибо за исправление. Но тем не менее, это подвержено ошибкам. Буду я remeber для добавления scale если я использую bc за несколько недель?Наверное, нет. И даже если будет способ изменить его постоянно, то это укусит Вас, если Вы будете в системе с настройками по умолчанию. –  Marco 14.06.2012, 19:26
  • 3
    Лично я действительно помню о scale так как я встретился bc в первый раз несколько лет назад. Но я всегда забывал ли функция вывода в lua put или puts. ;) –  manatwork 14.06.2012, 20:06
  • 4
    Просто рассчитайте до н.э как один из языков сценариев. Я всегда знаю, нужны ли мне целочисленные результаты или не - если целое число в порядке, я остаюсь в ударе, еще у меня редко есть причина использовать до н.э. Для lua необходимо помнить-e, печать и круглую скобку. –  user unknown 15.06.2012, 00:39
  • 5
    Просто всегда используйте bc -l вместо плоскости bc, затем никогда беспокойство о scale. –  Dalker 01.05.2013, 22:54

Существует много способов вычислить. Для простых выражений можно использовать bash самостоятельно:

echo $((20+5))

или expr:

expr 20 + 5

И для сложных случаев существует большой инструмент bc:

echo "20+5" | bc

Btw, до н.э может вычислить даже очень сложное выражение с корнями, логарифмами, потому что, грешите и так далее.

36
27.01.2020, 19:26
  • 1
    я добавил Ваш expr опция к принятому ответу. Должен был выбрать, чтобы принять и централизовать. –  Michael Durrant 14.06.2012, 18:11
  • 2
    Вы пытаетесь выполниться expr 20+5. Необходимо ввести пробелы между числами и плюс заставить его работать: expr 20 + 5. Это важно. –  rush 22.06.2012, 17:14

Начиная ни с кого еще упомянул это, и хотя это не строго калькулятор (но ни один не все эти языки сценариев общего назначения), я хотел бы упомянуть units:

$ units "1 + 1"
        Definition: 2
$ units "1 lb" "kg"
        * 0.45359237
         / 2.2046226

Или, для менее вывода, таким образом, можно заставить просто число использовать в $() присваивать чему-то:

$ units -t "1 + 1"
2
$ units -t "1 lb" "kg"
0.4539237

И это даже делает температурные преобразования

$ units -t "tempC(20)" "tempF"
68

Для получения температурного преобразования в выражении для дальнейшего вычисления сделайте это:

$ units -t "~tempF(tempC(20))+1"
68.1
10
27.01.2020, 19:26
  • 1
    Существует столько опций, которые не требуют установки дополнительной программы, которую я не вижу, почему можно было бы хотеть пойти тем путем. –  ndemou 17.09.2017, 13:29
  • 2
    @ndemou Это установлено по умолчанию на некоторых дистрибутивах... и большом количестве этих других ответов, не. И необходимо ли было действительно прокомментировать, что на ответе этому пять лет? –  Random832 17.09.2017, 23:27
  • 3
    я думаю, что хорошо прокомментировать, когда я вниз-голосую и это - практика, это также поощряется S.E. Я не вижу, почему пять лет релевантны. Тот же комментарий относится ко всем подобным ответам - ничто персональное. (BTW даже самая неясная программа может быть быть установленным по умолчанию на некотором распределении. В этом случае я протестировал недавние установки Debian, Ubuntu, CentOS и Redhat и единицы не) –  ndemou 18.09.2017, 16:44

Gnuplot

gnuplot - интерактивная программа для построения графиков
Следуйте по указанной выше ссылке или наберите gnuplot и затем help внутри интерпретатора gnuplot.
Gnuplot - это программа, рожденная для построения графических данных, но она также может быть использована для вычислений. Преимуществом этой программы является возможность определения функций или использования встроенных.

echo  "pr 20+5/2"  |  gnuplot          #  Lazy-note `pr` instead of print
22                                     #  Integer calculation & result
echo  "pr 20.+5/2"  |  gnuplot         #  Lazy-note `pr` instead of print
22.0                                   #  Floating point result
echo  "pr sin(2*pi/3.)"  |  gnuplot    #  Some functions ...
0.866025403784439

Корневой (или какой-нибудь другой C-интерпретатор)

Система ROOT предоставляет набор OO-фреймворков со всеми функциональными возможностями, необходимыми для обработки и анализа больших объемов данных очень эффективным способом....

Вы можете использовать ее как C интерпретатор , CINT, или же вы можете использовать один из многих других C интерпретаторов . IMHO, он огромный, сложный, мощный, и не всегда дружелюбный, но может дать и большое удовлетворение.

Если Вы действительно не хотите слушать внутри себя маленький голос, который цитирует Confucio , и Вы готовы разбить (масляную) мушку на колесе , Вы можете использовать root . В этом случае -l является обязательным, чтобы избежать появления заставки....

echo  "20+5/2"   | root -l
(const int)22
echo  "20+5/2."  | root -l
(const double)2.25000000000000000e+01

echo  "cout<< 20+5/2 << endl;"   | root -l
22
4
27.01.2020, 19:26

Для целочисленного арифметика (где 3/2 = 1)

  • Bash ECHO $ ​​((1 + 1))
  • Рыба Математика 1 + 1
  • ZSH * ECHO $ ​​((1 + 1))

*: и KSH93, Яш

для арифметики с плавающей точкой (где 3/2 = 1,5)

  • Bash awk "начать { Печать 10/3} " (низкая точность)
  • Bash Echo« 10/3 »| BC -L (высокая точность)
  • Рыба Математика - S4 10/3
  • ZSH * ECHO $ ​​((10./3) )

*: и ksh93, Яш

Вы можете, конечно, можно настроить вашу оболочку, чтобы использовать awk с минимальным типом CALC 10 / 3 (см. Примечания о том, как сделать это для Bash 1 и Рыба 2 ).

Основная причина предположения awk для bash заключается в том, что она предустановлена ​​практически всех Unix-подобных ОС и достаточно света (есть, конечно, стоимость запуска процесса) с менее точным, но более удобным для человека, чем BC -L , который печатает 20 десятичных цифр (хотя вы, безусловно, настроить awk, чтобы получить более десятичные цифры ).


Примечания

(1) Как использовать упрощенный синтаксис в Bash

Добавьте эту функцию Bash в ваш ~ / .bashrc :

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

(2) Как использовать упрощенный синтаксис В рыбе

Создать CALC Функция рыб (то есть текстовый файл с именем /home/ndemou/.config/fish/functions/calc.fish ):

function calc
    awk "BEGIN{ print $argv }" ;
end
5
27.01.2020, 19:26

Теги

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