Comments 40
real 0m19.454s
user 0m19.420s
sys 0m0.000s
Антиоффтопик:
То есть, bc позволяет оперировать только от 2 до 16-ричной системы?
А есть простой способ переводить в произвольную систему, без программирования?
Примерно двукратная разница, результат расчета одинаков.
Наверное разные реализации bс, не думаю что от ОС так зависит.
Debian 8.2:
real 0m17.874s
user 0m17.796s
sys 0m0.000s
FreeBSD 10.3-RELEASE:
9.600u 0.047s 0:09.67 99.6% 40+167k 0+0io 0pf+0w
real 0m15.492s
user 0m15.438s
sys 0m0.016s
Есть. Делим с остатком на основание системы. Остаток записываем справа. С результатом повторяем операцию, пока число не кончится.
19 в двоичной
19/2=9, остаток 1
9/2=4, остаток 1
4/2 = 2, остаток 0
2/2 =1, остаток 0
1/2 = 0, остаток 1
записываем это всё справа-налево — 10011
19 в пятиричной
19/5 = 3, остаток 4
3/5 = 0, остаток 3
записываем справа-налево — 34
19 в 19-ричной
19/19 = 1, остаток 0
1/19 = 0, остаток 1
записываем справа-налево — 10
19 в любой системе с основанием больше 19
19/Основание = 0, остаток 19
считаем 19 буквами, (помним, что F — 15) получаем J
Zsh позволяет использовать любую систему счисления с целочисленными основаниями от 2 до 36:
% echo $(( [#36] 15#1078ABE ))
36#70D7H
Специально для 16‐ричной системы работает префикс 0x
, для двоичной — 0b
, других специальных префиксов нет (для 8‐ричной можно включить обычный 0755 == 493
, но по‐умолчанию это отключено). Zsh также работает и с числами с плавающей точкой (но только в десятичной записи). Но zsh работает только с 64‐битными целыми и double
, никакой длинной арифметики или чисел произвольной точности. Можно попросить zsh отделять каждые n разрядов, по‐умолчанию 3:
% echo $(( [#_] 107825.17632 ))
107_825.176_32
% echo $(( [#_4] 107825.17632 ))
10_7825.1763_2
user 0m19.337s
sys 0m0.024s
Но как бенчмарк не интересно: грузилось только 1 и 8 ядер
В программе забит приоритет и ассоциативность операторов, что превращает 4^4^4
в 4^(4^4)
. Такое вполне правильно считать «группировкой».
Из консоли считаю в node, просто запускаю и пишу выражение.
В gnome3 при установленном калькуляторе, можно считать прямо в строке поиска приложений.
user 0m23.547s
sys 0m0.016s
i5-2410M 2.30GHz
ubuntu bash on windows
Пробелы пропущены, должно быть
$ expr 15 + 25
echo 'ibase=2;obase=10;10' | bc
10
Из общих соображений кажется естественным вначале задавать obase в привычной системе, потом ibase. Я так попробовал, и оно работает ожидаемым образом:
echo 'obase=10;ibase=2;10' | bc
2
$ echo 'ibase=2;obase=10;10' | bc
$ 10
$ echo 'obase=10;ibase=2;10' | bc
$ 2
Развращенный идеей функциональной чистоты, которая из первобытных функциональных языков проникла в почти во все современные, народ уже начал было забывать ужасы императивщины и потерял страх перед побочными эффектами.
ibase=2;obase=10;
— здесь мне тоже хочется увидеть такой смысл:
(ibase,obase)=(2,10)
но в тех присваиваниях притаился побочный эффект.
Для этого не нужно устанавливать дополнительных программ, все уже есть в базовом наборе операционной системы.
В Arch по умолчанию нет bc
.
$ echo '2^1.5' | bc -l
Runtime warning (func=(main), adr=9): non-zero scale in exponent
2
Приходится извращаться с помощью экспоненты и логарифма, что не очень удобно:
$ echo 'e(l(2)*1.5)' | bc -l
2.82842712474619009755
Или какой-нибудь арккосинус если нужно посчитать, приходится использовать арктангенс.
set /a result=15+25
echo %result%
Стоит отметить, если не в скриптах пилить, то результат выдаст и первая строчка. Кроме того, учитывая тот факт, что приличная часть народу на линуксах использует wine, то сей метод хоть и бессмыслен, но всё же имеет место быть.
про GHCi выше уже сказали, познакомился, когда пытался в haskell
насчет таблиц и графиков, пользуем SigmaPlot
А в раздел «математические среды», возможно, стоит добавить RStudio.
Сам все еще часто пользуюсь bc или ghci (когда надо что-то нетривиальное со строками или списками посчитать), реже awk, если попалась какая-то таблица, а дочку пытаюсь приучить к R (она сопротивляется и пользуется обычным микрокалькулятором, даже не программируемым).
Понадобилось какое-то время, чтобы понять, о чём речь и что к чему, особенно если пропустить ссылку на «источник» :)
user 0m50.952s
sys 0m0.000s
model name: Intel® Pentium® 4 CPU 2.80GHz
cpu MHz: 2798.580
cache size: 1024 KB
Занимательная математика командной строки