Похоже, что bc не поддерживает операции с плавающей точкой, когда я делаю echo 1/8 | bc
это, получаю ноль.
Я проверил bc (1)
, но он даже не упоминает float
, так что мне интересно, если это поддерживается?
Похоже, что bc не поддерживает операции с плавающей точкой, когда я делаю echo 1/8 | bc
это, получаю ноль.
Я проверил bc (1)
, но он даже не упоминает float
, так что мне интересно, если это поддерживается?
Ответы:
bc
не работает с плавающей запятой, но делает десятичные числа с фиксированной точностью. -l
Флаг Hauke упоминает грузы математической библиотеки для например. Триг функции, но это также означает,
[...] масштаб по умолчанию - 20
scale
является одной из ряда «специальных переменных», упомянутых на странице руководства. Вы можете установить его:
scale=4
В любое время вы хотите ( -l
был ли использован или нет). Это относится к числу значащих цифр, используемых в десятичной дроби . Другими словами, последующие решения будут округлены до этого количества цифр после десятичной шкалы (== с фиксированной точностью).
Масштаб по умолчанию sans -l
равен 0, что означает округление до целых чисел.
Страница man говорит:
Если bc вызывается с опцией -l, предварительно загружается математическая библиотека [...]
Понимание этого может быть улучшено, действительно ...
1) Числа в bc имеют шкалу. Масштаб числа не следует путать с масштабным коэффициентом. Тот же самый «масштаб» используется в качестве функции для запроса масштаба числа или в качестве параметра для установки коэффициента масштабирования.
echo "scale=scale(1.1);11/10" | bc will return 1.1
2) Коэффициент масштабирования определяет, сколько цифр хранится справа от десятичной точки при выполнении операций. Если s - текущий масштабный коэффициент, sa - масштаб первого операнда a, sb - масштаб второго операнда b, результаты усекаются следующим образом:
scale of result
a+b max(sa,sb)
a-b max(sa,sb)
a*b min(sa+sb , max(s,sa,sb))
a/b s
a%b so that a = b*quotient + remainder; remainder has sign of a
a^b min(sa×|b|, max(s,sa)); b must be integer
sqrt(a) max(s,sa)
3) В начале координат был препроцессор DC. Сейчас во многих системах bc - это отдельная программа.
Источник: [ https://plan9.io/magic/man2html/1/dc]
echo "scale=4; 1/8" | bc