The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Раздел полезных советов: Пример функции математической разно..."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Разговоры, обсуждение новостей (Public)
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Пример функции математической разно..."  
Сообщение от auto_tips (ok) on 02-Июн-08, 17:20 
function math_minus {
   num1_point=$(echo $1|sed 's/.*\..*/true/');
   num2_point=$(echo $2|sed 's/.*\..*/true/');
   if [ $num1_point = "true" ]; then
      num1_1=$(echo $1|sed 's/\..*$//');
      num1_2=$(echo $1|sed 's/^.*\.//');
   else
      num1_1=$1;num1_2=0;
   fi; if [ $num2_point == "true" ]; then
      num2_1=$(echo $2|sed 's/\..*$//');
      num2_2=$(echo $2|sed 's/^.*\.//');
   else
      num2_1=$2;num2_2=0;
   fi
   num1_2_len=${#num1_2}
   num2_2_len=${#num2_2}
   if [ $num1_2_len -lt $num2_2_len ]; then
      len_diff=$((num2_2_len-num1_2_len))
      for i in `seq 1 $len_diff`; do
          diff_nulls="${diff_nulls}0"
      done
      num1_2="${num1_2}$diff_nulls"
   fi; if [ $num1_2_len -gt $num2_2_len ]; then
      len_diff=$((num1_2_len-num2_2_len))
      for i in `seq 1 $len_diff`; do
          diff_nulls="${diff_nulls}0"
      done
      num2_2="${num2_2}$diff_nulls"
   fi

   if [ $num1_1 -gt $num2_1 ]; then
      num1=$((num1_1-num2_1));
   fi
   if [ $num2_1 -gt $num1_1 ]; then
      num1=$((num2_1-num1_1));
   fi
   num1_len=${#num1}
   num2_len=$((num1_len+1))
   num1="${num1}${num1_2}"
   num2="${num2}${num2_2}"
   if [ $num1 -gt $num2 ]; then
      result=$((num1-num2))
   else
      result=$((num2-num1))
   fi

   num1=${result:0:num1_len}
   num2=${result:num2_len}
   result="${num1}.${num2}"
   if [ "$result" == "." ]; then
     result=0
   fi
   echo "$result"
}


Выше превиденный пример является концептуальной демонстрацией,
в скриптах для выполнения сложных матеметических операций более подходит bc:

echo "scale=5; a=4.1; (a+80)*3 - a^2 + l(a)" | bc -l

где через scale задается точность в знаках после запятой,
l() - натуральный логарифм, "^" - возведение в степень.
Возможности языка bc очень широки, поддерживаются циклы, условия, функции

Другая форма использования:
var1=2; var2=$(echo "scale=5; $var2 / 2" | bc)

Для преобразования формата представления чисел удобно использовать утилиту dc
Перевод числа 11 в шестнадцатеричную форму:
   echo "11 16 o p" | dc
в двоичную
   echo "11 2 o p" | dc

Выполнения простых целочисленных операций:
   echo $(( 20 / 2 ))
   var1=2; var2=$(( $var1 + 1 ))


URL:
Обсуждается: http://www.opennet.dev/tips/info/1661.shtml

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по ответам | RSS]

1. "Пример функции математической разности float-чисел в обход b..."  
Сообщение от pavlinux email(ok) on 02-Июн-08, 17:20 
Неплохо бы к таким примерам, добавлять ещё и
цель, смысл, оправданность и рабочий пример.
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

2. "Пример функции математической разности float-чисел в обход b..."  
Сообщение от Fen1x email on 02-Июн-08, 18:38 
+1
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

3. "Пример функции математической разности float-чисел в обход b..."  
Сообщение от brain email(??) on 02-Июн-08, 18:43 
Пример библиотеки для операций с "длинными" числами

http://brain.tltsu.ru/~brain/projects/bla.shtml

там же на ней реализовано умножение матриц.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

4. "Пример функции математической разности float-чисел в обход b..."  
Сообщение от brain email(??) on 02-Июн-08, 18:46 
Кстати, частое порождение sed'ов и echo-ев сильно замедляет работу кода... Мне кажется лучше изпользовать возможности BASH для обработки чисел.
Тем более, что небольшие числа BASH вообще умеет воспринимать числами и производить над ними арифметические операции.
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

5. "Пример функции математической разности float-чисел в обход b..."  
Сообщение от const email(??) on 02-Июн-08, 18:49 
> Кстати, частое порождение sed'ов и echo-ев сильно замедляет работу кода... Мне кажется лучше изпользовать возможности BASH для обработки чисел.

С другой стороны, лучше оставаться в рамках POSIX Shell по возможности...

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

6. "Пример функции математической разности float-чисел в обход b..."  
Сообщение от brain email(??) on 02-Июн-08, 18:54 
К вопросу о смысле: реализация в рамках POSIX Shell работает настолько медленно что в моём случае (длинные числа) трудно даже отладку вести: тесты работают чересчур медленно.
Посему, POSIX - хорошо, и Ъ, но уж точно не нужно. А вот реализация с "фичами" BASH
работает на удивление быстро, даже умножение матриц. Это может придать смысл самой идее...
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

7. "Пример функции математической разности float-чисел в обход b..."  
Сообщение от pavlinux email(ok) on 02-Июн-08, 18:58 
я же просил со смыслом...

Толку от этого ...  На bash_e я могу сервак написать.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

8. "Пример функции математической разности float-чисел в обход b..."  
Сообщение от pavlinux email(ok) on 02-Июн-08, 19:04 
Я придумал СМЫСЛ!

Хороший довесок к резюме, на тему знания BASH, при поступлении на работу.  =)

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

9. "математические разности"  
Сообщение от Andrey Mitrofanov on 02-Июн-08, 20:49 
>Хороший довесок к резюме, на тему знания BASH, при поступлении на работу.
> =)

Уверен, что "написал преобразование Фурье и библиотеку операций над матрицами на bash-е" будет адекватно воспринято при собеседовании? %-))

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

10. "математические разности"  
Сообщение от pavlinux email(ok) on 02-Июн-08, 21:08 
>>Хороший довесок к резюме, на тему знания BASH, при поступлении на работу.
>> =)
>
>Уверен, что "написал преобразование Фурье и библиотеку операций над матрицами на bash-е"
>будет адекватно воспринято при собеседовании? %-))

Вполне, как человек добивающийся цели, ни смотря на идиотство (задание начальства) и трудоемкость. (хотя посчитать sin()/сos() через ряд Маклорена  не так уж и гиморно).   :)


Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

11. "Пример функции математической разности float-чисел в обход b..."  
Сообщение от littlesavage on 02-Июн-08, 22:40 
математическая разность float-чисел в обход bc, вариант 2:
echo "4,45 55,3" | awk '{print $1-$2}'
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

12. "Пример функции математической разности float-чисел в обход b..."  
Сообщение от alext (??) on 02-Июн-08, 23:35 
sizeof int в bash - 64 бита между прочим, да еще и бит знака хранится отдельно!
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

13. "Пример функции математической разности float-чисел в обход b..."  
Сообщение от pavlinux email(ok) on 03-Июн-08, 03:08 
Ага...

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

echo "evalf(sinh(ln(3.14159265)-sqrt(2.0)),25);" |  /opt/maple11/bin/maple -q
              
-0.2727572577106891599885980

=)

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

14. "Пример функции математической разности float-чисел в обход b..."  
Сообщение от naquad email(??) on 05-Июн-08, 01:06 
0o на кой ляд вам на баше понадобились числа с плавающей точкой вобще? =\
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

15. ":)) А смысл?!"  
Сообщение от Andrey Mitrofanov on 05-Июн-08, 11:32 
>0o на кой ляд вам на баше понадобились числа с плавающей точкой
>вобще? =\

Автор ешё не ответил.

Сами мучаемся!

%) Пока предположения следующие: для воспитания характера (и спать на ржавых гвоздях обязательно); для начальства; для резюме (покладист, исполнителен: сказали на баше - написал на баше // фантазия с годами проходит, а "профессионализм" остаётся?!); фантастическое - "порождение echo-в и sed-ов" наверное(!) медненнее, чем такая-^^ "математика" на самом баше (кстати, echo в баше - builtin, см. `type echo`); ....

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

16. "Пример функции математической разности float-чисел в обход b..."  
Сообщение от Paranoidchaos email on 07-Июн-08, 13:01 
мда два дня назад столкнулся с проблемой сравнения в BASH-e float значений

и прочёл, что BASH не знает что такое float  для него 3.7  это строка

и конечно же две строки на больше или меньше сравнить нельзя кроме как в ASCII сравнении

пришлось рулить bc

спросите где ваще это применялось ? в обычном фильтре для Postfix-а когда надо было сравнивать результат оценки Spamassassin-a с установленным средним и максимальным значениями _SCORE_

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

17. "Пример функции математической разности float-чисел в обход b..."  
Сообщение от yurror on 10-Июн-08, 05:42 
Вообще-то есть octave
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

18. "Пример функции математической разности float-чисел в обход b..."  
Сообщение от terr0rist email(ok) on 11-Июн-08, 12:55 
Да и перл уже установлен на 90% *никсов.
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

19. "Пример функции математической разности float-чисел в обход b..."  
Сообщение от Щекн Итрч on 13-Июн-08, 05:47 
Умножение матриц это для вас не "смысл"??? :) :) :)
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

20. "Пример функции математической разности float-чисел в обход b..."  
Сообщение от pavlinux email(ok) on 13-Июн-08, 06:45 
>Умножение матриц это для вас не "смысл"??? :) :) :)

Смысл, но не на bash и не float :)



Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

21. "Пример функции математической разности float-чисел в обход b..."  
Сообщение от Lucf3r email(??) on 16-Июн-08, 10:55 
re,
Ну нафлудили. Смысл в что сто смысла нет, просто делать было нечего и довольно сильно бесило то что в интернете нет ни одного примера подобной операции без вызова bc, хоть это и возможно :)
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

22. "Пример функции математической разности float-чисел в обход b..."  
Сообщение от Lucf3r email(??) on 16-Июн-08, 12:27 
btw, использование функции реально быстрее вызова bc. Попробуйте в млн итераций в цикле, кроме этого bc в цикле офигевает от слишком частого запуска через "|" и отказывается работать :).

Умножение тож делал от нечего делать, но за ссылку спасибо.

Сервак(web-сервер) на баше люди тоже уже писали много раз, от части это тоже вдохновило.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру