The OpenNET Project / Index page

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

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

"дробная часть при деление"  +/
Сообщение от nastr email(??) on 24-Май-12, 17:53 
есть 3 переменные в shell, например:
a=4000000;b=2634523;c=12532;
нужно посчитать (a-b)/c, чтобы дробная часть осталась.
следующие 2 варианта не катят, т.к. отбрасывается дробная часть
expr ( $ a - $b ) / $c
let d=a-b;let e=d/c
Ответить | Правка | Cообщить модератору

Оглавление

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


1. "дробная часть при деление"  +/
Сообщение от Andrey Mitrofanov on 24-Май-12, 18:18 
> нужно посчитать (a-b)/c, чтобы дробная часть осталась.
> следующие 2 варианта не катят, т.к. отбрасывается дробная часть

Штаны на лямках, т.м.!

$ expr \( $a - $b \) \* 100 / $c |sed 's/..$/.&/'
108.95
$ _

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "дробная часть при деление"  +/
Сообщение от nastr email(??) on 24-Май-12, 18:44 
freepercen=`expr 100 - \( \( ${lcresource[1]}  \* 100 \) / ${lcresource[0]} \) |sed 's/..$/.&/'`
sesperuser=`expr \( ${lcresource[0]} - ${lcresource[1]} \) / $lcpersist |sed 's/..$/.&/'`

к первой переменной добавляет точку вначале, получается .34%,
а во второй переменной вставляет точку после перво

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "дробная часть при деление"  +/
Сообщение от nastr email(??) on 24-Май-12, 18:45 
freepercen=`expr 100 - \( \( ${lcresource[1]}  \* 100 \) / ${lcresource[0]} \) |sed 's/..$/.&/'`
sesperuser=`expr \( ${lcresource[0]} - ${lcresource[1]} \) / $lcpersist |sed 's/..$/.&/'`

к первой переменной добавляет точку вначале, получается .34%,
а во второй переменной вставляет точку после первой цифры, полается 1.11, а должно 111.95

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

4. "дробная часть при деление"  +/
Сообщение от allez (ok) on 24-Май-12, 19:43 
> есть 3 переменные в shell, например:
> a=4000000;b=2634523;c=12532;
> нужно посчитать (a-b)/c, чтобы дробная часть осталась.
> следующие 2 варианта не катят, т.к. отбрасывается дробная часть
> expr ( $ a - $b ) / $c
> let d=a-b;let e=d/c

Использование bc допускается?

$ a=4000000; b=2634523; c=12532; echo "($a-$b)/$c" | bc -l
108.95922438557293329077

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "дробная часть при деление"  +/
Сообщение от nastr email(??) on 25-Май-12, 10:13 
> Использование bc допускается?
>
$ a=4000000; b=2634523; c=12532; echo "($a-$b)/$c" | bc -l 
> 108.95922438557293329077

К сожалению нет, на этом серваке bc не установлен, и до установить нет возможности..:-(
Думаю может через awk как-то сделать..

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "дробная часть при деление"  +/
Сообщение от Andrey Mitrofanov on 25-Май-12, 10:16 
>через awk как-то сделать..

Ч-чё мешает?

$ awk 'BEGIN{print ('"$a"'-'"$b"')/'"$c"'}'
108.959
$ _

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "дробная часть при деление"  +/
Сообщение от Andrey Mitrofanov on 25-Май-12, 10:21 
$ awk 'BEGIN{printf"%*.*f\n",100,97,('"$a"'-'"$b"')/'"$c"'}'
108.9592243855729378765317960642278194427490234375000000000000000000000000000000000000000000000000000
$
Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

10. "дробная часть при деление"  +/
Сообщение от pavlinux (ok) on 30-Май-12, 19:59 
> $ awk 'BEGIN{printf"%*.*f\n",100,97,('"$a"'-'"$b"')/'"$c"'}'
> 108.9592243855729378765317960642278194427490234375000000000000000000000000000000000000000000000000000

Ху...вый у тебя калькулятор, после 14-ой цифры в мантиссе уже ошибка.

(4000000-2634523)/12532 = http://www.wolframalpha.com/input/?i=solve%28%2840...

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

12. "дробная часть при деление"  +/
Сообщение от Andrey Mitrofanov on 31-Май-12, 09:55 
>> $ awk 'BEGIN{printf"%*.*f\n",100,97,('"$a"'-'"$b"')/'"$c"'}'
> Ху...вый у тебя калькулятор, после 14-ой цифры в мантиссе уже ошибка.
>www.wolframalpha.co

Сам такой, :-P скрипт с зависимостью от интернета сделаешь??

Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

15. "дробная часть при деление"  +/
Сообщение от pavlinux (ok) on 04-Июн-12, 14:09 
> скрипт с зависимостью от интернета сделаешь??

Знаю людей с зависимостью от ..., а вот скрипт от интернета.


Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

8. "дробная часть при деление"  +/
Сообщение от nastr email(??) on 25-Май-12, 11:16 
freepercen=`awk 'BEGIN{print 100 - (('${lcresource[1]}' * 100) / '${lcresource[0]}')}'`
sesperuser=`awk 'BEGIN{print ('${lcresource[0]}' - '${lcresource[1]}') / '$lcpersist'}'`

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

9. "дробная часть при деление"  +1 +/
Сообщение от pavlinux (ok) on 30-Май-12, 19:46 
> нужно посчитать (a-b)/c, чтобы дробная часть осталась.

Ура, зачёты и курсовые начались... Будем разминать моск!!! :D

Вспоминаем школу - деление столбиком. :)


#!/bin/bash

a=4000000;
b=2634523;
c=12532;
m=();

x=$((a-b));
s=$((x/c));
h=$((x-(c*s)));

if [ $h == 0 ];
   then
       echo "$s.0";
       exit;
fi;

p=100;

for ((i = 0; i < p; i++))
   do
        h=$((h * 10));
       ss=$((h / c));
        h=$((h - c * ss));

        m[$i]=$ss;

done;

echo -ne "$s.";

for (( i = 0; i < ${#m[*]}; i++ ))
   do
      echo -ne "${m[$i]}";
done;

echo;

$ a.sh
108.9592243855729332907756144270667092243855729332907756144270667092243855729332907756144270667092243855

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

11. "дробная часть при деление"  +1 +/
Сообщение от pavlinux (ok) on 30-Май-12, 22:46 
> Вспоминаем школу - деление столбиком. :)
>108.9592243855729332907756144270667092243855729332907756144270667092243855729332907756144270667092243855

Дополнительная задачка на лето :)

Сие число является трансцендентным, но переводческим: 108.95(922438557293329077561442706670)

1. Найти этот период на bash
2. Представить в виде рациональной дроби.

P.S. Сравнение строк и символов не юзать, только чистый матан!

P.P.S. На сервере ничего нет, установлен только bash :)

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

13. "дробная часть при деление"  +/
Сообщение от Andrey Mitrofanov on 31-Май-12, 10:03 
>> Вспоминаем школу - деление столбиком. :)
>>108.9592243855729332907756144270667092243855729332907756144270667092243855729332907756144270667092243855

Силён, да!:)

> Дополнительная задачка на лето :)
> Сие число является трансцендентным, но переводческим: 108.95(922438557293329077561442706670)

Ты, конечно, задирал студента, и там д.б.быть "ра...ным" и "пери..кой десятичной ...". В общем да, так их.

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

14. "дробная часть при деление"  –1 +/
Сообщение от pavlinux (ok) on 02-Июн-12, 04:28 
>>> Вспоминаем школу - деление столбиком. :)
>>>108.9592243855729332907756144270667092243855729332907756144270667092243855729332907756144270667092243855
> Силён, да!:)

Скажи мил человек, ты где живешь? Есть пара задумок...

Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

16. "дробная часть при деление"  +/
Сообщение от LSTemp (ok) on 29-Июн-12, 23:17 
>> Вспоминаем школу - деление столбиком. :)
>>108.9592243855729332907756144270667092243855729332907756144270667092243855729332907756144270667092243855
> Дополнительная задачка на лето :)
> Сие число является трансцендентным, но переводческим: 108.95(922438557293329077561442706670)
> 1. Найти этот период на bash
> 2. Представить в виде рациональной дроби.
> P.S. Сравнение строк и символов не юзать, только чистый матан!
> P.P.S. На сервере ничего нет, установлен только bash :)

1) Спасибо за интересный вопрос. Профукал ссылку на эту тему в свое время на него, однако Аноним (спасибо) помог снова найти ее. Убил даже пару часов, чтоб институтскую математику вспомнить (азы только, за что еще раз спасибо:)

2) bash работает только с целочисленными значениями, чистый матан не выйдет в любом случае - для выделения дробной части числа все равно придется пользоваться строковым опрерациями (хотя и не совсем теми, что Вы явно запретили) что-то вроде:

# 108.95(922438557293329077561442706670)
v='108.95922438557293329077561442706670922438557293329077561442706670922438557293329077561442706670922438557293329077561442706670'
f="${v##*.}"

3) Разве понятие "трансцендентное число" не означает, что это число имеет бесконечный НЕПОВТОРЯЮЩИЙСЯ ряд цифр, что идет в разрез с другим условием задачи - "число является периодическим"?

ИМХО некорректная постановка задачи. Если будет время, прокомментируйте мои соображения. Интересно.

PS
Спасибо (даже если ответ не верен), что сподвигнули меня немного математику вспомнить )

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

17. "дробная часть при деление"  +1 +/
Сообщение от pavlinux (ok) on 30-Июн-12, 15:55 
> 3) Разве понятие "трансцендентное число" не означает, что это число имеет бесконечный
> НЕПОВТОРЯЮЩИЙСЯ ряд цифр, что идет в разрез с другим условием задачи
> - "число является периодическим"?

Ну да, фигню сморозил, я имел в виду бесконечным.  

Ответить | Правка | ^ к родителю #16 | Наверх | Cообщить модератору

18. "дробная часть при деление"  +/
Сообщение от LSTemp (ok) on 03-Июл-12, 04:30 
>> 3) Разве понятие "трансцендентное число" не означает, что это число имеет бесконечный
>> НЕПОВТОРЯЮЩИЙСЯ ряд цифр, что идет в разрез с другим условием задачи
>> - "число является периодическим"?
> Ну да, фигню сморозил, я имел в виду бесконечным.

ладно. кажется я иронию понял и вики даже почитал ).

- Каждое трансцендентное вещественное число является иррациональным
http://ru.wikipedia.org/wiki/%D0%A2%D1%8...

- Иррациональное число: Представляет собой бесконечную непериодическую десятичную дробь.
http://ru.wikipedia.org/wiki/%D0%98%D1%8...

я дал ответ - задача нерешаема в предложенных условиях.

вопрос решен или нет? жду ответа преподавателя ).

PS
http://www.opennet.me/openforum/vsluhforumID9/9492.html#30


Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

19. "дробная часть при деление"  +/
Сообщение от LSTemp (ok) on 05-Июл-12, 20:59 
> вопрос решен или нет? жду ответа преподавателя ).

или корректировки вопроса.

Ответить | Правка | ^ к родителю #18 | Наверх | Cообщить модератору

20. "дробная часть при деление"  +/
Сообщение от pavlinux (ok) on 17-Июл-12, 05:55 
>> вопрос решен или нет? жду ответа преподавателя ).
> или корректировки вопроса.

1. Число рациональное: 108+(12021/12532), но оно не влезет в целый типа баша,
период 30 знаков, а чтоб определить повтор нужно хотя бы 61.

Если число не влазит в процессор, его режут по кускам и работают
либо нудными циклическими алгоритмами со сдвигами, либо матричные
преобразования. Если честно, ужасно лень :)  

2. А чтоб сделать из числа с мантисой рациональную дробь,
достаточно разделить на порядок, найти НОД и упростить дробь.

напр.

108.12 == 108+0.12 == 108+(12/100) => НОД(12,100)= 4;
108.12 == 108+(3/25) => (108*25+3)/25 == 2703/25;

---

Ответить | Правка | ^ к родителю #19 | Наверх | Cообщить модератору

21. "дробная часть при деление"  +1 +/
Сообщение от Andrey Mitrofanov on 17-Июл-12, 09:06 
>>> вопрос решен или нет? жду ответа преподавателя ).
>> или корректировки вопроса.
> 1. Число рациональное: 108+(12021/12532), но оно не влезет в целый типа баша,
> период 30 знаков, а чтоб определить повтор нужно хотя бы 61.

Тссс! Не говори никому. Делимое-дедитель помещаются, и этого достаточно.

Запоминаешь для кажого выведенного разряда (цифры) результата пару делимое-делитель. Как только перед выводом очередной цифры результата пара повторилась -- период найден. (Не обязательньно с первой цифры или с первой после запятой. Т.е.может быть "непариодическая" чать в десятичной дроби.)

Про НОД - ты уже написал. Можно дробь поупрощать вначале.

> Если число не влазит в процессор, его режут по кускам и работают

Где bash и где процессор?:)

>2. А чтоб сделать из числа с мантисой рациональную дробь,

Вещественного с _округлением? Или :))периодической десятичной дроби?

Ответить | Правка | ^ к родителю #20 | Наверх | Cообщить модератору

22. "дробная часть при деление"  +/
Сообщение от Andrey Mitrofanov on 17-Июл-12, 09:16 
>>но оно не влезет в целый типа баша,
>> период 30 знаков, а чтоб определить повтор
>Делимое-дедитель помещаются, и этого достаточно.

Точнее, делимое <= делитель <= MAXINT/10. После чего, видимо, начинается мультиворд арифметик.

Ответить | Правка | ^ к родителю #21 | Наверх | Cообщить модератору

23. "дробная часть при деление"  +1 +/
Сообщение от pavlinux (ok) on 18-Июл-12, 00:33 
>>>> вопрос решен или нет? жду ответа преподавателя ).
>>> или корректировки вопроса.
>> 1. Число рациональное: 108+(12021/12532), но оно не влезет в целый типа баша,
>> период 30 знаков, а чтоб определить повтор нужно хотя бы 61.
> Тссс! Не говори никому. Делимое-дедитель помещаются, и этого достаточно.

108+(12021/12532) - эта дробь и в мозг влезет.

А я про это число, его только в матрицу и по кускам - домножил, сравнил, запомнил, следующий,...

108.95922438557293329077561442706670922438557293329077561442706670922438557293329077561442706670922438557293329077561442706670

> Про НОД - ты уже написал. Можно дробь поупрощать вначале.

НОД это и есть, то число на которое можно максимальное упростить дробь. :)

> Вещественного с _округлением? Или :))периодической десятичной дроби?

В том виде в котором его вводят.  Есть машинная эпсилон - 304 степень, больше ну никак.
для остального придумали libgmp

----

Так что задача сводится к трём функциям: Работа с большими числами, Нахождение порядка мантиссы, Нахождение НОД,
ну и мелочь всякя, типа упрощение дроби, умножение матриц... в общем уже пошли подсказки.    

Ответить | Правка | ^ к родителю #21 | Наверх | Cообщить модератору

24. "дробная часть при деление"  +/
Сообщение от pavlinux (ok) on 18-Июл-12, 00:38 
....
Ответить | Правка | ^ к родителю #23 | Наверх | Cообщить модератору

30. "дробная часть при деление"  +/
Сообщение от LSTemp (ok) on 18-Июл-12, 05:20 
>>>>> вопрос решен или нет? жду ответа преподавателя ).
>>>> или корректировки вопроса.
>>> 1. Число рациональное: 108+(12021/12532), но оно не влезет в целый типа баша,
>>> период 30 знаков, а чтоб определить повтор нужно хотя бы 61.
>> Тссс! Не говори никому. Делимое-дедитель помещаются, и этого достаточно.
> 108+(12021/12532) - эта дробь и в мозг влезет.
> А я про это число, его только в матрицу и по кускам
> - домножил, сравнил, запомнил, следующий,...

- в каком формате входные данные на bash придут? эта мозгогребаная дробь как факт не может уже попасть в чистом виде на вход скрипта (и вручную ты до сто-пятьдесят-сотого знака не пропишешь это значение) - значит только в том виде, который ты сейчас дал... в текстовом (формат не важен)
- смысл решения только на bash? это реальная задача или все же так - задание на лето?

>[оверквотинг удален]
> :)
>> Вещественного с _округлением? Или :))периодической десятичной дроби?
> В том виде в котором его вводят.  Есть машинная эпсилон -
> 304 степень, больше ну никак.
> для остального придумали libgmp
> ----
> Так что задача сводится к трём функциям: Работа с большими числами, Нахождение
> порядка мантиссы, Нахождение НОД,
> ну и мелочь всякя, типа упрощение дроби, умножение матриц... в общем уже
> пошли подсказки.

Ответить | Правка | ^ к родителю #23 | Наверх | Cообщить модератору

31. "дробная часть при деление"  +/
Сообщение от Andrey Mitrofanov on 18-Июл-12, 18:33 
Внимательно повторяю:

>> Тссс! Не говори никому. Делимое-дедитель помещаются, и этого достаточно.

#>> делимое <= делитель <= MAXINT/10

> 108+(12021/12532) - эта дробь и в мозг влезет.
> А я про это число, его только в матрицу и по кускам
> - домножил, сравнил, запомнил, следующий,...

Нет.(С)

> 108.95922438557293329077561442706670922438557293329077561442706670922438557293329077561442706670922438557293329077561442706670

$ ./b.sh |less
1365477 / 12532 = 108.95(922438557293329077561442706670)
1 / 40 = 0.025
1 / 20 = 0.05
1 / 2 = 0.5
1 / 1 = 1
1 / 3 = 0.(3)
1 / 30 = 0.0(3)
1 / 300 = 0.00(3)
1 / 7 = 0.(142857)
1 / 70 = 0.0(142857)
1 / 700 = 0.00(142857)
1 / 7 = 0.(142857)
3 / 7 = 0.(428571)
2 / 7 = 0.(285714)
6 / 7 = 0.(857142)
4 / 7 = 0.(571428)
5 / 7 = 0.(714285)
1 / 9 = 0.(1)
1 / 90 = 0.0(1)
(END)

>> Вещественного с _округлением? Или :))периодической десятичной дроби?
> В том виде в котором его вводят.  Есть машинная эпсилон -
> 304 степень, больше ну никак.
> для остального придумали libgmp

Задание на лето#2: из колонки после " = " получать то, что "до".
Напр.: 0.00(142857) >>> 1 /700

//Да, наверное, можно... Подсказка и ./b.sh -- в следующих выпусках. Stay tuned///

Ответить | Правка | ^ к родителю #23 | Наверх | Cообщить модератору

38. "дробная часть при деление"  –1 +/
Сообщение от pavlinux (ok) on 24-Июл-12, 05:21 
> Задание на лето#2: из колонки после " = " получать то, что "до".
> Напр.: 0.00(142857) >>> 1 /700

Дык, эта


echo '
1365477 / 12532 = 108.95(922438557293329077561442706670)
1 / 40 = 0.025
1 / 20 = 0.05
1 / 2 = 0.5
1 / 1 = 1
1 / 3 = 0.(3)
1 / 30 = 0.0(3)
1 / 300 = 0.00(3)
1 / 7 = 0.(142857)
1 / 70 = 0.0(142857)
1 / 700 = 0.00(142857)
1 / 7 = 0.(142857)
3 / 7 = 0.(428571)
2 / 7 = 0.(285714)
6 / 7 = 0.(857142)
4 / 7 = 0.(571428)
5 / 7 = 0.(714285)
1 / 9 = 0.(1)
1 / 90 = 0.0(1)' | awk '{print $5 $4 $1 $2 $3}';

А ваще, баян (см. п.2)- http://www.opennet.me/openforum/vsluhforumID9/9467.html#20

Ответить | Правка | ^ к родителю #31 | Наверх | Cообщить модератору

25. "дробная часть при деление"  +/
Сообщение от LSTemp (ok) on 18-Июл-12, 02:55 
>>> вопрос решен или нет? жду ответа преподавателя ).
>> или корректировки вопроса.

СТОП!!! )))

Вопрос от Вас был задан (дополнительная задача на лето). И мне кажется я свой ответ довольно развернуто объяснил (дважды). То, что Вы подразумевали в конечном результате, роли не играет.

Я хочу получить ответ, на свой ответ (тавтология - знаю). Изначально Ваша задача содержит противоречивые и взаимоисключающие математические термины (гениев в расчет не берем - они как раз для решения таких противоречий :). Решения Вашей задачи в предоставленных Вами условиях не существует.

Признаете?

Корректировки вопроса я не видел, вижу решение, которое мне пытаются показать, рассказывая очевидные вещи (в байте 8-бит итд - утрирую конечно - но суть такая же)

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


Ответить | Правка | ^ к родителю #20 | Наверх | Cообщить модератору

32. "дробная часть при деление"  +/
Сообщение от pavlinux (ok) on 19-Июл-12, 05:43 
>[оверквотинг удален]
>>> или корректировки вопроса.
> СТОП!!! )))
> Вопрос от Вас был задан (дополнительная задача на лето). И мне кажется
> я свой ответ довольно развернуто объяснил (дважды). То, что Вы подразумевали
> в конечном результате, роли не играет.
> Я хочу получить ответ, на свой ответ (тавтология - знаю). Изначально Ваша
> задача содержит противоречивые и взаимоисключающие математические термины (гениев в расчет
> не берем - они как раз для решения таких противоречий :).
> Решения Вашей задачи в предоставленных Вами условиях не существует.
> Признаете?

Вопроса было два:

1. Из того длинного числа с мантиссой найдти и показать период.
2. Вернуть дробь обратно.  float -> int/int

Число можешь представлять как хочешь, - массив, строка, два числа, число и массив,...

Строгих два правила: Для вычислений НЕ юзать внешние утилиты и НЕ использовать строковое сравнение.  


Ответить | Правка | ^ к родителю #25 | Наверх | Cообщить модератору

34. "дробная часть при деление"  +/
Сообщение от LSTemp (ok) on 21-Июл-12, 23:20 
>[оверквотинг удален]
>> Я хочу получить ответ, на свой ответ (тавтология - знаю). Изначально Ваша
>> задача содержит противоречивые и взаимоисключающие математические термины (гениев в расчет
>> не берем - они как раз для решения таких противоречий :).
>> Решения Вашей задачи в предоставленных Вами условиях не существует.
>> Признаете?
> Вопроса было два:
> 1. Из того длинного числа с мантиссой найдти и показать период.
> 2. Вернуть дробь обратно.  float -> int/int
> Число можешь представлять как хочешь, - массив, строка, два числа, число и
> массив,...

Эти условия ясны. Одно но (цитирую Вас - первоначальная постановка задачи):
"
Дополнительная задачка на лето :)

Сие число является трансцендентным, но переводческим: 108.95(922438557293329077561442706670)
"

Трансцендентное и периодическое число являются взаимоисключающими математическими понятиями. Поэтому в этих условиях задача не решаема (я не знаю откуда Вы взяли число и почему описали его, как трансцендентное, указав при этом период. я вижу то, что вижу). Подтвердите это или скажите, что я не прав (я это уже раза 3-и спрашивал - ответа нет).

> Строгих два правила: Для вычислений НЕ юзать внешние утилиты и НЕ использовать
> строковое сравнение.

Условия решения задачи понятны. Ее формулировка не ясна для меня до сих пор (я честно уже немного запутался в постах) - можно повторить специально для меня (заранее спасибо) :).


Ответить | Правка | ^ к родителю #32 | Наверх | Cообщить модератору

26. "дробная часть при деление"  +/
Сообщение от LSTemp (ok) on 18-Июл-12, 03:29 
>[оверквотинг удален]
> период 30 знаков, а чтоб определить повтор нужно хотя бы 61.
> Если число не влазит в процессор, его режут по кускам и работают
> либо нудными циклическими алгоритмами со сдвигами, либо матричные
> преобразования. Если честно, ужасно лень :)
> 2. А чтоб сделать из числа с мантисой рациональную дробь,
> достаточно разделить на порядок, найти НОД и упростить дробь.
> напр.
> 108.12 == 108+0.12 == 108+(12/100) => НОД(12,100)= 4;
> 108.12 == 108+(3/25) => (108*25+3)/25 == 2703/25;
> ---

v=108.12
i=0
f=0

продемонстрируйте плз на bash выделение целой(i) и дробной(f) части из заданного значения(v) без использования строковых функций. на сервер ничего нет - только bash.


Ответить | Правка | ^ к родителю #20 | Наверх | Cообщить модератору

28. "дробная часть при деление"  +/
Сообщение от LSTemp (ok) on 18-Июл-12, 04:39 
>[оверквотинг удален]
>> достаточно разделить на порядок, найти НОД и упростить дробь.
>> напр.
>> 108.12 == 108+0.12 == 108+(12/100) => НОД(12,100)= 4;
>> 108.12 == 108+(3/25) => (108*25+3)/25 == 2703/25;
>> ---
> v=108.12
> i=0
> f=0
> продемонстрируйте плз на bash выделение целой(i) и дробной(f) части из заданного значения(v)
> без использования строковых функций. на сервер ничего нет - только bash.

снимаю вопрос - начальное ограничение было только СРАВНЕНИЕ строк не использовать.


Ответить | Правка | ^ к родителю #26 | Наверх | Cообщить модератору

27. "дробная часть при деление"  +/
Сообщение от LSTemp (ok) on 18-Июл-12, 04:02 
>[оверквотинг удален]
> период 30 знаков, а чтоб определить повтор нужно хотя бы 61.
> Если число не влазит в процессор, его режут по кускам и работают
> либо нудными циклическими алгоритмами со сдвигами, либо матричные
> преобразования. Если честно, ужасно лень :)
> 2. А чтоб сделать из числа с мантисой рациональную дробь,
> достаточно разделить на порядок, найти НОД и упростить дробь.
> напр.
> 108.12 == 108+0.12 == 108+(12/100) => НОД(12,100)= 4;
> 108.12 == 108+(3/25) => (108*25+3)/25 == 2703/25;
> ---

30-Июн-12, 01:09: "- к решению второго пункта задачи при реальных реальных условиях я бы подошел с того, что степени 10 в знаменатель ставил для начала (для простоты)."

http://www.opennet.me/openforum/vsluhforumID9/9492.html#30

про интегралы на bash  я конечно пошутил - решение задачи того не стоит.

Ответить | Правка | ^ к родителю #20 | Наверх | Cообщить модератору

33. "дробная часть при деление"  +/
Сообщение от pavlinux (ok) on 19-Июл-12, 05:50 
> про интегралы на bash  я конечно пошутил - решение задачи того не стоит.

Определённые - методом прямоугольников, неопределённые - по частям методом прямоугольников. :)


Ответить | Правка | ^ к родителю #27 | Наверх | Cообщить модератору

35. "дробная часть при деление"  +/
Сообщение от LSTemp (ok) on 21-Июл-12, 23:26 
>> про интегралы на bash  я конечно пошутил - решение задачи того не стоит.
> Определённые - методом прямоугольников, неопределённые - по частям методом прямоугольников.
> :)

Спасибо.

Но я вообще-то об эффективности решения говорил. Можно и на ассемблере - все от задачи зависит (про Вашу я уже спрашивал - реальная/не_реальная/обучение/что-то еще?)


Ответить | Правка | ^ к родителю #33 | Наверх | Cообщить модератору

36. "дробная часть при деление"  +/
Сообщение от pavlinux (ok) on 22-Июл-12, 04:14 
> реальная/не_реальная/обучение/что-то еще?)

Just for fun!!!

Тут шастуют преподы универов, тырят отседа примеры задач для студентов.
Можно гадость с подставой для обоих сделать. За одно и преподов обучим. :)  

Например мало кто юзает popd/push, -, shift, local, declare...


А ваще, как месть JavaScript хоцца написать MP3 плеер. :)

Ответить | Правка | ^ к родителю #35 | Наверх | Cообщить модератору

37. "дробная часть при деление"  +/
Сообщение от LSTemp (ok) on 23-Июл-12, 01:57 
>> реальная/не_реальная/обучение/что-то еще?)
> Just for fun!!!
> Тут шастуют преподы универов, тырят отседа примеры задач для студентов.
> Можно гадость с подставой для обоих сделать. За одно и преподов обучим.
> :)
> Например мало кто юзает popd/push, -, shift, local, declare...
> А ваще, как месть JavaScript хоцца написать MP3 плеер. :)

))))))))) повеселило ) - одобрямс )


Ответить | Правка | ^ к родителю #36 | Наверх | Cообщить модератору

29. "дробная часть при деление"  +/
Сообщение от LSTemp (ok) on 18-Июл-12, 04:56 
>>> вопрос решен или нет? жду ответа преподавателя ).
>> или корректировки вопроса.
> 1. Число рациональное: 108+(12021/12532), но оно не влезет в целый типа баша,
> период 30 знаков, а чтоб определить повтор нужно хотя бы 61.
> Если число не влазит в процессор, его режут по кускам и работают
> либо нудными циклическими алгоритмами со сдвигами, либо матричные
> преобразования. Если честно, ужасно лень :)
> 2. А чтоб сделать из числа с мантисой рациональную дробь,
> достаточно разделить на порядок, найти НОД и упростить дробь.

поиск НОД все равно  = цикл

> напр.
> 108.12 == 108+0.12 == 108+(12/100) => НОД(12,100)= 4;
> 108.12 == 108+(3/25) => (108*25+3)/25 == 2703/25;
> ---

Ответить | Правка | ^ к родителю #20 | Наверх | Cообщить модератору

39. "_периодическая дробная при делениИ"  +/
Сообщение от Andrey Mitrofanov on 27-Июл-12, 12:52 
>> нужно посчитать (a-b)/c, чтобы дробная часть осталась.
> Ура, зачёты и курсовые начались... Будем разминать моск!!! :D
> Вспоминаем школу - деление столбиком. :)
>
#!/bin/bash 
> m=();
>

Разминаем. Вот т-те твои "трансцедентные".

- - - 8< - - - ./b.sh

#!/bin/bash

div() {

local x c m s h p h1 i j

x=$1; c=$2

m=();
h1="${c//?/ }"
s="${h1:${#x}} $x / $c = $((x/c))"
h=$((x%c))
    [ "$DBG" ] && echo "-- $x. $h $c"

p=$c #at max.

i=0; j=0
while ((h!=0)); do

  let  h1=h  h=h*10  ss=h/c  h=h%c
  let m[i]=ss
  let mm[i]=h1

    [ "$DBG" ] && echo "++$ss j=$j i=$i h1=$h1"

((j>=i && i<p)) || break
  let i++

  for((j=0; j<i && mm[j]!=h; j++)); do :; done
done

     [ "$DBG" ] && echo "   ## j=$j i=$i h=$h h1^$h1"

((h==0&&i==0)) ||\
for (( l = 0; l <= i; l++ )); do
  ((l==0 )) && s="$s."
  ((l==j &&h!=0 )) && s="$s("
  (( (l+10+2*${#c})d == 0 )) && s="$s"$'\n'           #"words" sep.// ~64 chars
      s="$s${m[$l]}"
  ((l==i-1 &&h!=0 )) && s="$s)" && break
done

echo "$s"
}

#div 1365477 12532
#div 1 40;div 1 20;div 1 2;div 1 1;
#div 1 3;div 1 30;div 1 300
#div 1 7;div 1 70; div 1 700
#div 1 7;div 3 7;div 2 7; div 6 7; div 4 7; div 5 7
#div 1 9;div 1 90
#exit
[ "$1" -a "$2" ] && time div $1 $2

- - - >8 - - -

Замечаешь, как для определения оооочень:) длинного периода достаточно массива (вектора? списка...) целых, каждое из которых не большне _делителя, а арифметика не выходит за пределы (делитель-1)*10. Отсюда и <=MAXINT/10.

> $ a.sh
> 108.9592243855729332907756144270667092243[...8<...]

$ ./b.sh 1365477 12532
1365477 / 12532 = 108.95(922438557293329077561442706670)

real    0m0.023s
user    0m0.020s
sys     0m0.004s

|

$ seq 1335 1337|xargs -n1 ./b.sh 1
    1 / 1335 = 0.0(00749063670411985018726591760299625468164794)

real    0m0.034s
user    0m0.036s
sys     0m0.000s
    1 / 1336 = 0.000(7485029940119760479041916167664670658682634
7305389221556886227544910179640718562874251497005988023952095808
38323353293413173652694610778443113772455089820359281437125)

real    0m0.269s
user    0m0.248s
sys     0m0.020s
    1 / 1337 = 0.(0007479431563201196709050112191473448017950635
7516828721017202692595362752430815258040388930441286462228870605
8339566192969334330590875093492894540014958863126402393418100224
3829468960359012715033657442034405385190725504861630516080777860
8825729244577412116679132385938668661181750186985789080029917726
2528047868362004487658937920718025430067314884068810770381451009
7232610321615557217651458489154824233358264771877337322363500373
9715781600598354525056095736724008975317875841436050860134629768
1376215407629020194465220643231114435302916978309648466716529543
754674644727)

real    0m2.629s
user    0m2.528s
sys     0m0.100s

Когда './b.sh 1 31337' чё-т надолго задумался, основная процедура была переписана на awk
(...8<... : потеряное при этом нарезание на стороки заменено самоцензурой):

$ seq 1335 1337|xargs -n1 ./c.sh 1                                                                          
    1 / 1335 = 0.0(00749063670411985018726591760299625468164794)

real    0m0.003s
user    0m0.000s
sys     0m0.000s
    1 / 1336 = 0.000(748502994011976047904191616766467065868263473053892215...8<...

real    0m0.013s
user    0m0.008s
sys     0m0.000s
    1 / 1337 = 0.(000747943156320119670905011219147344...8<...16529543754674644727)

real    0m0.109s
user    0m0.108s
sys     0m0.000s

.

$ ./c.sh 1 31337
...8<...
real    5m3.147s
user    5m2.927s
sys     0m0.028s

##$ ./b.sh 1 31337
##...8<...
Обобвал после :
$ top |grep b.sh
...
6789 yya       20   0  6472 3536 1108 R  100  0.1  51:48.86 b.sh

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

40. "quick fix. при делениИ"  +/
Сообщение от Andrey Mitrofanov on 27-Июл-12, 12:57 
Неудачи преследовалии.

> - - - 8< - - - ./b.sh
>   (( (l+10+2*${#c})d == 0 )) && s="$s"$'\n'    
>- - - >8 - - -

fixxed:
  (( (l+10+2*${#c})%64 == 0 )) && s="$s"$'\n'

Ответить | Правка | ^ к родителю #39 | Наверх | Cообщить модератору

41. "_периодическая дробная при делениИ"  +/
Сообщение от pavlinux (ok) on 01-Авг-12, 04:30 
>>> нужно посчитать (a-b)/c, чтобы дробная часть осталась.
>> Ура, зачёты и курсовые начались... Будем разминать моск!!! :D
>> Вспоминаем школу - деление столбиком. :)
> Разминаем. Вот т-те твои "трансцедентные".

Молодец, ты победил, твоя лень меньше моей :)

Ответить | Правка | ^ к родителю #39 | Наверх | Cообщить модератору

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

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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