LINUX.ORG.RU
ФорумTalks

А вы знали что у bc есть нативное возведение в степень?

 , ,


0

2

Я всегда думал что его там нет - ни ** ни pow() не работают, и считал его как e(l(x)*y). Сейчас заглянул в ман чтобы посмотреть как там определить кастомную функцию (чтобы задать pow в каком-нить конфиге), и случайно наткнулся на список арифметических операторов, где значком, обычно использующимся для XOR (^), оказывается обозначается возведение в степень. Правда, только в целочисленную, но в большинстве случаев другого и не надо.

★★★★★
Ответ на: комментарий от CrX

Хотелось бы теперь узнать, есть ли в данном случае какие-то подводные камни

  1. Затраты на создание процесса (OK в большинстве случаев)

  2. Поддерживает только целочисленную арифметику

  3. Больше не даёт практически-заметный прирост производительности относительно bc

  4. Семантика кода возврата не совпадает (даже противоречит) с более привычным /bin/test

kaldeon ★★
()
Последнее исправление: kaldeon (всего исправлений: 1)
Ответ на: комментарий от CrX

Отдельно я его тоже не ставил, нужды не было.

Ну это реально редкий случай. Он по зависимостям много чем тянется, например profile-cleaner или screenfetch.

Честно признаться сам был удивлён, когда осознал его отсутствие в базовой поставке. Но я совсем не стремился к какому-то минимализму. У меня стоит гном, стоит хромиум, стоит код, стоят всякие тулзы для сборки, стоит подман.

Ещё из похожего - which тоже не установлен по умолчанию. Его я отдельно ставлю, т.к. пару раз сталкивался с тем, что некоторые скрипты (в программах, скачанных отдельно) ломаются. Наверное стоит bc установить просто на всякий случай.

upd: Выше вон expr советуют. Это в принципе тоже вариант, да. Хотелось бы теперь узнать, есть ли в данном случае какие-то подводные камни

Да, expr в coreutils поставляется, он есть. Из подводных камней разве что то, что он совсем уж примитивный. Ну и там немного странно обрабатывается вход. Например expr '1 + 2' не сработает, надо expr '1' '+' '2'. Но это ладно, это мелочи. Лично я бы просто писал скрипт на bash и использовал бы $((...)), наверное. Но если bash не приемлем, можно и так.

vbr ★★★★★
()
Ответ на: комментарий от vbr

Это как минимум старше лет на 10-15 чем TeX. Когда-то давным-давно компьютеры были большими, а нормальных мониторов не было, но надо было как-то степень отображать. Надстрочного индекса не было ни у старых терминалов, ни тем более у телетайпов (простая печатная машинка подключенная к ЭВМ). Вот тогда взяли ^ как стрелочку вверх, которая как бы показывает то что то что после неё стоит в верхнем индексе. А юникодного символа ↑ конечно ещё не было.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 3)
Ответ на: комментарий от LINUX-ORG-RU

Да, это плохо. Ещё есть мили, фунты, футы, версты, аршины, цельсии, фаренгейты и прочая ересь, которая только портит жизнь.

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

юникодного символа ↑

Такой символ и без юникода был. Но, наверно, и правда не в те времена.

firkax ★★★★★
() автор топика

^ - это возведение в степень много где, поэтому даже не читая маны это первое что приходит на ум попробовать.

anc ★★★★★
()
Ответ на: комментарий от Chiffchaff

В качестве калькулятора давно использую ipython

...

в последние же 30 лет смысла в нём нет.

С учетом того, что удаву 30-к ещё не стукнул, то это похоже на вброс.

anc ★★★★★
()

А символ извлечения корня где-нибудь бывает?

Помню однажды приспичило - делал для людей через символ `~` просто потому что ничего другого не придумалось. 4~2 = 2 грубо говоря.

Toxo2 ★★★★★
()
Ответ на: комментарий от Toxo2

А зачем? Давайте ещё символы логарифмов занесем...

anc ★★★★★
()
Ответ на: комментарий от Toxo2

В дефолтной 8-битной кодировке есть. Но его не используют.

firkax ★★★★★
() автор топика
Ответ на: комментарий от anc

А в шелл-скриптах другая и не нужна обычно. Там вся арифметика это инкрементировать счётчик в цикле или что-то похожее.

firkax ★★★★★
() автор топика
Ответ на: комментарий от vbr

Какой в этом смысл? Можно же написать 4^(1/2)

В 94м году казалось, что если я предлагаю человеку ввести выражение вида y=x^2 и нарисовать ему на экране параболу, то логично было бы и корень тогда уж какой-то закорючкой предложить обозначить для рисования его графика. y=x~2.

Toxo2 ★★★★★
()
Ответ на: комментарий от Toxo2

В принципе с compose key даже юзабельно. 2 <compose> ^ 2 = , <compose> v / =

vbr ★★★★★
()
Последнее исправление: vbr (всего исправлений: 1)

Правда, только в целочисленную, но в большинстве случаев другого и не надо.

Лично мне из целочисленных бывают нужны только квадрат и куб, которые проще расписывать через умножение. А вот корни нужны постоянно. Поэтому e(l(x)*y).

question4 ★★★★★
()
Ответ на: комментарий от firkax

За долго до юникода и раньше, чем ASCII.

В стандартном алфавите ALGOL-60 использовался для возведения в степень:

2.3 Delimiters 

...

<arithmetic operator> ::= + | − | × | / | ÷ | ↑
<relational operator> ::= < | ≤ | = | ≥ | > | ≠
<logical operator> ::= ≡ | ⊃ | ∨ | ∧ | ¬

В будущем ASCII тоже был ↑ там, где сейчас ^

algo
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)