2013-04-23 7 views
5

bc, в Linux командной строке калькулятора, достаточно опытный, чтобы вычислитьИспользуя дробный показатель с Ьсом

3^2 
9 

Даже отрицательный показателя не спутать:

3^-2 
0.11111 

Но когда он терпит неудачу, когда он содержит

9^0.5 
Runtime warning (func=(main), adr=8): non-zero scale in exponent 

Как может быть, что bc не может справиться с этим?

И что означает сообщение об ошибке?


Да, я прочитал http://www.linuxquestions.org/questions/programming-9/bc-and-exponents-containing-decimals-and-fractions-755260/ и решение

e(0.5*l(9)) 
2.99999999999999999998 

дал там.

И да, это не хорошо, потому что точность теряется и

Калькулятор должен решить выражения. Вы не должны сделать жизнь проще для калькулятора, он должен быть другой путь вокруг ...


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

Это не мешает мне написать функцию для касательных или котангенсов, поскольку она выглядит довольно прямолинейно заданной s(x) и c(x). Но, на мой взгляд, вычисление квадратного корня через пользовательскую функцию слишком много.

Почему каждый использует bc, если есть python? Скорость?

+0

Второй аргумент выражения expr^expr должен быть целым числом (scale = 0). Но 0.5 имеет масштаб = 1. – hendrik

+0

Замечание 'bc' уже имеет функцию коренного квадратного корня:' scale = 5; sqrt (9) ' – khaverim

ответ

2

bc - это очень простые и более сложные функции, не предусмотренные «математическим расширением», должны быть реализованы на самом языке: в нем есть все, что вам нужно сделать; в частности «сила» является распространенным примером даже на wikipedia.

Но вы также можете быть заинтересованы в чтении, например, this answer здесь, на SO.

+0

Я бы согласился с этим, если бы у bc не было функции« power ». Он может рассчитывать '3^2' и даже' 3^-2' безупречно. Тем не менее, он отвечает с помощью сообщения undecipherable error, когда просто запрашивается функция с квадратным корнем. –

+0

он не имеет функции питания: он имеет целочисленную функцию мощности. Ошибка, когда я попрошу «9^0.11» в bc, которую я могу использовать, теперь «exp not a integer», которая делает ее более ясной. Но «ненулевая шкала» означает абсолютно то же самое, поскольку вы используете «scale = 0», чтобы сказать bc, что вы хотите «целую точность» (без десятичных чисел). – ShinTakezou

+0

«У него нет функции питания: он имеет целочисленную функцию мощности» не имеет смысла. Каждая другая функция в bc принимает дробные аргументы. Зачем делать исключение для такой широко используемой функции? –

0

В bc, b должно быть целым числом в a^b. Однако вы можете добавить свои собственные функции Ьс так:

создать файл ~/.bcrc, добавьте следующую функцию к нему:

define pow(a, b) { 
    if (scale(b) == 0) { 
     return a^b; 
    } 
    return e(b*l(a)); 
} 

, то вы можете начать бв следующим образом:

bc -l <(cat ~/.bcrc) 

поэтому вы можете использовать функцию pow для выполнения таких вычислений.

Подробнее here, вы можете добавить еще несколько функций к bc.