LINUX.ORG.RU

man bc

In /bin/sh, the following will assign the value of «pi» to the shell variable pi.
pi=$(echo «scale=10; 4*a(1)» | bc -l)

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

> сначала справку от нарколога, а потом обсудим вопрос…
До этого как были не нужны математические функции. Читал ман. Не понял как вычислять. Ну да, должен такую элементарщину.

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

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

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

Тьфу, чего это я?

23:37 /Data
function sin(){ echo "scale=10; s($1*a(1)/45);" | bc -l; }
23:37 /Data
sin 45
.7071067811
23:37 /Data
sin 90
1.0000000000
23:37 /Data
sin 30
.4999999999

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Дальше:

function cos(){ echo "scale=10; c($1*a(1)/45);" | bc -l; }
function tan(){ echo "scale=10; arg=$1*a(1)/45; s(arg)/c(arg);" | bc -l; }
function ln(){ echo "scale=10; l($1);" | bc -l; }
function log(){ echo "scale=10; l($1)/l(10);" | bc -l; }
и т.п.

Eddy_Em ☆☆☆☆☆
()

Конечно есть!

$ ruby -e «puts Math.sin(45)»

babusha
()
Ответ на: комментарий от uzbl

awk для меня такой же темный лес, как и sed (понимаю лишь элементарные инструкции), а perl вообще не знаю. Проще уж тогда на сях написать библиотечку.

Или вообще баш пропатчить :)

Eddy_Em ☆☆☆☆☆
()
$ python <<< `printf "import math\n\rprint math.sin(2)"`
0.909297426826
Tanger ★★★★★
()

Элементарная тригонометрическая функция через костыль, куда это годится?

Phaser
() автор топика
Ответ на: Google(c) от zolden

А десятичные логарифмы, тангенс и арктангенс как записывается?

Phaser
() автор топика
Ответ на: Google(c) от zolden

>>sin(90) 0.893997

Гы, фига ты, дырку, небось, высверлил, пока крутил.

mclaudt
()

Используйте perl/ruby. И это не костыль, просто так удобнее будет.

observer ★★★
()
function fact()                                                                                                                                                                        
{                                                                                                                                                                                         
  if [ $# != 1 ]                                                                                                                                                                            
  then                                                                                                                                                                                      
    echo "FAIL" >&2                                                                                                                                                                           
    return 0                                                                                                                                                                                    
  fi                                                                                                                                                                                        
                                                                                                                                                                                          
  case $1 in                                                                                                                                                                                
    [01]) echo 1 ;;                                                                                                                                                                           
    *) n=`expr $1 - 1`                                                                                                                                                                        
      m=`fact $n`                                                                                                                                                                               
      echo `expr $1 \* $m`                                                                                                                                                                      
      ;;                                                                                                                                                                                        
  esac                                                                                                                                                                                      
} 

function power()
{
  if [ $# != 2 ]
  then
    echo "FAIL" >&2
    return 0
  fi

  result=1
  for f in `seq 1 $2`
  do
    result=$(( $result * $1 ))
  done
  echo $result
}

function sin()                                                                                                                                                                        
{                                                                                                                                                                                         
if [ $# != 2 ]                                                                                                                                                                            
then                                                                                                                                                                                      
  echo "FAIL" >&2                                                                                                                                                                         
  return 2                                                                                                                                                                                
fi                                                                                                                                                                                        
                                                                                                                                                                                          
result=$1                                                                                                                                                                                 
n=1                                                                                                                                                                                       
for k in `seq 2 $2`                                                                                                                                                                       
do                                                                                                                                                                                        
n=$((n + 2))                                                                                                                                                                              
result=$(( $result - 1.0 * `pow $1 $n` * `pow -1 $k` / `fact $n` ))                                                                                                                       
done                                                                                                                                                                                      
echo $result                                                                                                                                                                              
} 

быдлокод, ну да пофиг же :3

do0dlez ★★
()
Ответ на: комментарий от do0dlez
function sin()
{
  if [ $# != 2 ]
  then
    echo "FAIL" >&2
    return 2
  fi

  result=$1
  x=$1
  n=1
  fact=1
  for k in `seq 2 $2`
  do
    x=$(( $x * $1 * $1 ))
    n=$(( $n + 2 ))
    fact=$(( (-1.0) * $fact * ($n - 1) * $n ))
    result=$(( $result + $x / $fact ))
  done
  echo $result
}
do0dlez ★★
()
Ответ на: комментарий от babusha

Придется тогда писать еще лишнюю команду.

Проще всего сделать на сях каких-нибудь мат. программку, сохранить ее в ~/bin и наделать там симлинков на нее с именами sin, cos и т.п.

А лучше - пропатчить под это дело баш. И вообще «скрестить» баш со scilab'ом :)

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

на сях каких-нибудь мат. программку,

Я со своим хеллоувордными знаниями Си, могу 10 штук тебе таких написать, на руби еще быстрее. :)

А вообще, баш тупое говно, мои скрипты на баше на 70% состоят из вставок на руби, ибо баш такой убогий, особенно круто, что в баше отсутствуют типа данных, т.е var=2+2 сами отгадаете что получиться? Баш пора на свалку истории.

babusha
()
Ответ на: комментарий от Eddy_Em

Переходи с баша на руби, на си не очень удобно писать такие вещи, на руби самое оно, баш устарел и полностью от начала и до конца состоит из костылей, после руби на нем отвратительно писать.

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

> Да, баш определенно нужно закопать :)
Он для автоматизации определенных действий в системе, это не язык программирования.

Phaser
() автор топика

В тред врывается zsh.

THE ZSH/MATHFUNC MODULE
       The zsh/mathfunc module provides standard mathematical functions for use when evaluating mathematical formulae.  The syntax agrees with
       normal C and FORTRAN conventions, for example,

              (( f = sin(0.3) ))

       assigns the sine of 0.3 to the parameter f.
x3al ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.