2014-10-02 5 views
0

Следующая строка не работает в моем сценарии:Bash калькулятор

a=$(echo "scale=3;(2*$j/(sqrt(3)*$i))" | bc) 
a1=$(echo `expr "scale=3; $a^(1/3)"` | bc -l) 

ошибка это дает:

Runtime warning (func=(main), adr=21): non-zero scale in exponent

Я просто хочу, чтобы иметь значение кубического корня из «а». Так или иначе, я не понимаю. Пожалуйста, дайте некоторое представление.

ответ

1

Эта линия является проблематичным:

a1=$(echo `expr "scale=3; $a^(1/3)"` | bc -l) 

Так как вы не можете использовать не целое значение в качестве мощности в bc.

Пример воспроизвести эту ошибку:

bc -l 
bc 1.06 
sqrt(3)^(1/3) 
Runtime warning (func=(main), adr=11): non-zero scale in exponent 
1 

Решение:

Вы можете использовать эту функцию для вычисления кубического корня:

a1=$(bc -l <<< "scale=3; e(l($i)/3)") 

Пример:

i=8; bc -l <<< "scale=3; e(l($i)/3)" 
1.999 

Или использовать awk как уже упоминалось @fedorqui

+1

Вы можете сделать 'журнал (а)' и разделить на '3', а затем' антилогарифм() ' –

+0

@anubhava: Благодарю вас так много, работает. –

+0

Добро пожаловать, рад, что это сработало. – anubhava

1

Вы, вероятно, хотите использовать awk для этого вместо использования сложных bc syntaxs:

awk -v num=$bash_variable 'BEGIN{print num^(1/3)}' 

Например:

v=3 
awk -v num=$v 'BEGIN{print num^(1/3)}' 

Возвраты: 1.44225.

Или хранить переменную для дальнейшего использования:

var=$(awk -v num=$v 'BEGIN{print num^(1/3)}')