Відповіді:
dc
є дуже архаїчним інструментом і дещо старшим за bc
. Щоб цитувати сторінку Вікіпедії :
Це одна з найдавніших утиліт Unix, яка передбачає навіть винахід мови програмування C; як і інші утиліти цього урожаю, він має потужний набір функцій, але надзвичайно короткий синтаксис.
Синтаксис - це зворотна польська позначення, яка в основному означає, що аргументи (тобто числа) спочатку йдуть за оператором. Основний приклад dc
використання:
echo '3 4 * p' | dc
Там, де p
потрібно надрукувати результат обчислення. bc
з іншого боку, використовує більш звичні позначення інфіксів і, таким чином, є більш інтуїтивно зрозумілим. Ось приклад bc
використання:
echo '3 * 4' | bc
bc
є стандартизованим POSIX і тому, ймовірно, більш портативний з цих двох (принаймні, в сучасних системах). Якщо ви займаєтесь ручною роботою калькулятора, то це, безумовно, вибір (якщо ви дещо не мазохіст). dc
Проте, як і раніше, це може бути використане, ось випадок, коли зворотна польська нотація стане в нагоді. Уявіть, що у вас є програма, яка виводить потік чисел, які ви хочете підсумовувати, наприклад:
23
7
90
74
29
Зробити це dc
дуже просто (принаймні, із сучасними реалізаціями, де кожен оператор може взяти більше двох чисел), оскільки вам потрібно лише додати a +p
до потоку, наприклад:
{ gen_nums; echo +p } | dc
Але bc
це складніше, оскільки нам потрібно не тільки поставити +
між кожним числом і переконатися, що все знаходиться в одному рядку, але і переконатися, що в кінці є новий рядок:
{ gen_nums | sed '$ !s/$/+/' | tr -d '\n'; echo; } | bc
gen_nums
приклад жахливо складним шляхом bc
. Це може бути спрощено до:gen_nums | paste -sd+ | bc
bc
був лише інструмент на передньому кінці, який складав bc
позначення до позначень dc
та додавав їх dc
до результату. На FreeBSD все ще є -c
прапор, для bc
якого ви все ще можете скласти до dc
позначення . For example
відлуння '3 * 4' | bc` дорівнює echo '3 * 4' | bc -c | dc
. Дивіться linux.die.net/man/1/bc та freebsd.org/cgi/man.cgi?query=bc&sektion=1
dc
ти використовуєш? У Ubuntu 14.04 та OS X +
оператор завжди працює на рівно двох значеннях у стеці
bc -c
робиться щось дивне та інше (а -c
прапор недокументований). Якщо я спробую передати це dc
, я отримаю купу помилок (і результат без втручання в нього dc
є самим виразним @iK3:K4:*W@r\n@i
).
Основна різниця між ними полягає в тому, що dc
використовується зворотна польська позначення . Він вимагає явних команд навіть для отримання результату.
Ви можете додати два цілих числа bc
, сказавши:
bc <<< "2+4"
і вона виробляла б 6
на лінії сама. Однак dc
вам потрібно буде сказати:
dc <<< "2 4 +p"
Ви також можете робити дуже цікаві речі, використовуючи dc
, наприклад, зверніться до моєї відповіді тут для створення
Hello World!
використовуючи dc
.
dc <<< "8 9 * P101P108P108P111P4 8 * P81 6 + P111P114P108P100P33P"
dc
є калькулятором, тоді bc
як це фактична мова. Дивіться їхні чоловічі сторінки.
до н.е.DC - це калькулятор на зворотному шліфуванні, який підтримує арифметику необмеженої точності. Це також дозволяє визначати і викликати макроси. Зазвичай dc зчитує зі стандартного вводу; якщо йому задані будь-які аргументи команд, вони є іменами, а dc зчитує та виконує вміст файлів перед читанням зі стандартного вводу. Весь нормальний вихід відповідає стандартному виходу; вся помилка виводиться на стандартну помилку.
bc - мова, яка підтримує довільні точні числа з інтерактивним виконанням операторів. У синтаксисі з мовою програмування С є деякі подібності. Стандартна математична бібліотека доступна за допомогою параметра командного рядка. За запитом математична бібліотека визначається перед обробкою будь-яких файлів. bc починається з обробки коду з усіх файлів, перелічених у командному рядку, у вказаному порядку. Після обробки всіх файлів, bc зчитується зі стандартного вводу. Весь код виконується під час його читання. (Якщо файл містить команду зупинити процесор, bc ніколи не буде читати зі стандартного вводу.)
Це дійсно залежить від того, що ти в кінцевому рахунку хочеш зробити математично. Деякі операції неможливо використовувати dc
. Я використовував обидва роки на додаток до кількох інших інструментів калькулятора командного рядка. Див. " Розв'язувач виразів командного рядка? " Для додаткових прикладів.
dc
того , щоб бути зворотної польської нотації калькулятор і так як я завжди використовував HP Reverse Polish Notation калькуляторів я дійсно вважаю за краще використовувати , dc
щоб , bc
але я б сказав , що вони обидва все ще використовувати в будь-який час вам потрібно виконати складні математичні обчислення. Я часто використовую їх для перетворення чисел b / w бази 10 до бази 16 та бази 2. Але використовував їх для підрахунку стовпців у табличних даних, а також у сценарії AWK.
bc
була мова в тому сенсі, що вона робила dc
доброзичливу людину - не те, щоб вона була більш потужною. У ці дні додатки розділяє LIBS, але bc
називали мову і dc
з калькулятором , бо dc
зробили математику і bc
говорили математика - до dc
. Ось старіша man
сторінка : Розроблена мова під назвою BC
[1], яка приймає програми, написані мовами вищого рівня та збирає вихід, інтерпретований DC. Деякі з описаних нижче команд були розроблені для інтерфейсу компілятора і користувачеві людиною нелегко маніпулювати ними.
dc
це також мова. наприклад, codegolf.stackexchange.com/a/47921/11259
На мою скромну думку і якомога менше слів, GNU dc відрізняється від GNU bc трьома способами:
1) Якщо математика бібліотеки bc не викликає занепокоєння, щоб зберегти якомога більше натискань на клавіші (за словами Яна Лукасевича: нотація без дужок), виконуючи елементарну арифметику, сконцентруватися більше на суті та уникнути відволікань.
2) У командному рядку Microsoft Windows 7 GNU dc споживає менше пам'яті (~ 320K), ніж GNU bc (~ 360K).
3) Більш деталізований контроль у GNU dc, ніж у GNU bc, наприклад, команди стека та регістру відсутні у GNU bc.
Версія 1.07.1 win32 для обох - за адресою https://embedeo.org/ws/command_line/bc_dc_calculator_windows/
expr
дуже часто для простих обчислень в командному рядку та в скриптах.