- дробная часть при деление, Andrey Mitrofanov, 18:18 , 24-Май-12 (1)
> нужно посчитать (a-b)/c, чтобы дробная часть осталась. > следующие 2 варианта не катят, т.к. отбрасывается дробная часть Штаны на лямках, т.м.! $ expr \( $a - $b \) \* 100 / $c |sed 's/..$/.&/' 108.95 $ _
- дробная часть при деление, nastr, 18:44 , 24-Май-12 (2)
freepercen=`expr 100 - \( \( ${lcresource[1]} \* 100 \) / ${lcresource[0]} \) |sed 's/..$/.&/'` sesperuser=`expr \( ${lcresource[0]} - ${lcresource[1]} \) / $lcpersist |sed 's/..$/.&/'`к первой переменной добавляет точку вначале, получается .34%, а во второй переменной вставляет точку после перво
- дробная часть при деление, nastr, 18:45 , 24-Май-12 (3)
freepercen=`expr 100 - \( \( ${lcresource[1]} \* 100 \) / ${lcresource[0]} \) |sed 's/..$/.&/'` sesperuser=`expr \( ${lcresource[0]} - ${lcresource[1]} \) / $lcpersist |sed 's/..$/.&/'`к первой переменной добавляет точку вначале, получается .34%, а во второй переменной вставляет точку после первой цифры, полается 1.11, а должно 111.95
- дробная часть при деление, allez, 19:43 , 24-Май-12 (4)
> есть 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
- дробная часть при деление, nastr, 10:13 , 25-Май-12 (5)
> Использование bc допускается? > $ a=4000000; b=2634523; c=12532; echo "($a-$b)/$c" | bc -l > 108.95922438557293329077 К сожалению нет, на этом серваке bc не установлен, и до установить нет возможности..:-( Думаю может через awk как-то сделать..
- дробная часть при деление, Andrey Mitrofanov, 10:16 , 25-Май-12 (6)
>через awk как-то сделать..Ч-чё мешает? $ awk 'BEGIN{print ('"$a"'-'"$b"')/'"$c"'}' 108.959 $ _
- дробная часть при деление, Andrey Mitrofanov, 10:21 , 25-Май-12 (7)
$ awk 'BEGIN{printf"%*.*f\n",100,97,('"$a"'-'"$b"')/'"$c"'}' 108.9592243855729378765317960642278194427490234375000000000000000000000000000000000000000000000000000 $
- дробная часть при деление, pavlinux, 19:59 , 30-Май-12 (10)
> $ 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...
- дробная часть при деление, Andrey Mitrofanov, 09:55 , 31-Май-12 (12)
>> $ awk 'BEGIN{printf"%*.*f\n",100,97,('"$a"'-'"$b"')/'"$c"'}' > Ху...вый у тебя калькулятор, после 14-ой цифры в мантиссе уже ошибка. >www.wolframalpha.coСам такой, :-P скрипт с зависимостью от интернета сделаешь??
- дробная часть при деление, pavlinux, 14:09 , 04-Июн-12 (15)
> скрипт с зависимостью от интернета сделаешь??Знаю людей с зависимостью от ..., а вот скрипт от интернета.
- дробная часть при деление, nastr, 11:16 , 25-Май-12 (8)
freepercen=`awk 'BEGIN{print 100 - (('${lcresource[1]}' * 100) / '${lcresource[0]}')}'` sesperuser=`awk 'BEGIN{print ('${lcresource[0]}' - '${lcresource[1]}') / '$lcpersist'}'`
- дробная часть при деление, pavlinux, 19:46 , 30-Май-12 (9) +1
> нужно посчитать (a-b)/c, чтобы дробная часть осталась.Ура, зачёты и курсовые начались... Будем разминать моск!!! :D Вспоминаем школу - деление столбиком. :) #!/bin/basha=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
- дробная часть при деление, pavlinux, 22:46 , 30-Май-12 (11) +1
> Вспоминаем школу - деление столбиком. :) >108.9592243855729332907756144270667092243855729332907756144270667092243855729332907756144270667092243855Дополнительная задачка на лето :) Сие число является трансцендентным, но переводческим: 108.95(922438557293329077561442706670) 1. Найти этот период на bash 2. Представить в виде рациональной дроби. P.S. Сравнение строк и символов не юзать, только чистый матан! P.P.S. На сервере ничего нет, установлен только bash :)
- дробная часть при деление, Andrey Mitrofanov, 10:03 , 31-Май-12 (13)
>> Вспоминаем школу - деление столбиком. :) >>108.9592243855729332907756144270667092243855729332907756144270667092243855729332907756144270667092243855 Силён, да!:) > Дополнительная задачка на лето :) > Сие число является трансцендентным, но переводческим: 108.95(922438557293329077561442706670) Ты, конечно, задирал студента, и там д.б.быть "ра...ным" и "пери..кой десятичной ...". В общем да, так их.
- дробная часть при деление, pavlinux, 04:28 , 02-Июн-12 (14) –1
>>> Вспоминаем школу - деление столбиком. :) >>>108.9592243855729332907756144270667092243855729332907756144270667092243855729332907756144270667092243855 > Силён, да!:) Скажи мил человек, ты где живешь? Есть пара задумок...
- дробная часть при деление, LSTemp, 23:17 , 29-Июн-12 (16)
>> Вспоминаем школу - деление столбиком. :) >>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 Спасибо (даже если ответ не верен), что сподвигнули меня немного математику вспомнить )
- дробная часть при деление, pavlinux, 15:55 , 30-Июн-12 (17) +1
> 3) Разве понятие "трансцендентное число" не означает, что это число имеет бесконечный > НЕПОВТОРЯЮЩИЙСЯ ряд цифр, что идет в разрез с другим условием задачи > - "число является периодическим"?Ну да, фигню сморозил, я имел в виду бесконечным.
- дробная часть при деление, LSTemp, 04:30 , 03-Июл-12 (18)
- дробная часть при деление, LSTemp, 20:59 , 05-Июл-12 (19)
> вопрос решен или нет? жду ответа преподавателя ).или корректировки вопроса.
- дробная часть при деление, pavlinux, 05:55 , 17-Июл-12 (20)
>> вопрос решен или нет? жду ответа преподавателя ). > или корректировки вопроса.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; ---
- дробная часть при деление, Andrey Mitrofanov, 09:06 , 17-Июл-12 (21) +1
>>> вопрос решен или нет? жду ответа преподавателя ). >> или корректировки вопроса. > 1. Число рациональное: 108+(12021/12532), но оно не влезет в целый типа баша, > период 30 знаков, а чтоб определить повтор нужно хотя бы 61.Тссс! Не говори никому. Делимое-дедитель помещаются, и этого достаточно. Запоминаешь для кажого выведенного разряда (цифры) результата пару делимое-делитель. Как только перед выводом очередной цифры результата пара повторилась -- период найден. (Не обязательньно с первой цифры или с первой после запятой. Т.е.может быть "непариодическая" чать в десятичной дроби.) Про НОД - ты уже написал. Можно дробь поупрощать вначале. > Если число не влазит в процессор, его режут по кускам и работают Где bash и где процессор?:) >2. А чтоб сделать из числа с мантисой рациональную дробь, Вещественного с _округлением? Или :))периодической десятичной дроби?
- дробная часть при деление, Andrey Mitrofanov, 09:16 , 17-Июл-12 (22)
>>но оно не влезет в целый типа баша, >> период 30 знаков, а чтоб определить повтор >Делимое-дедитель помещаются, и этого достаточно.Точнее, делимое <= делитель <= MAXINT/10. После чего, видимо, начинается мультиворд арифметик.
- дробная часть при деление, pavlinux, 00:33 , 18-Июл-12 (23) +1
>>>> вопрос решен или нет? жду ответа преподавателя ). >>> или корректировки вопроса. >> 1. Число рациональное: 108+(12021/12532), но оно не влезет в целый типа баша, >> период 30 знаков, а чтоб определить повтор нужно хотя бы 61. > Тссс! Не говори никому. Делимое-дедитель помещаются, и этого достаточно.108+(12021/12532) - эта дробь и в мозг влезет. А я про это число, его только в матрицу и по кускам - домножил, сравнил, запомнил, следующий,... 108.95922438557293329077561442706670922438557293329077561442706670922438557293329077561442706670922438557293329077561442706670 > Про НОД - ты уже написал. Можно дробь поупрощать вначале. НОД это и есть, то число на которое можно максимальное упростить дробь. :) > Вещественного с _округлением? Или :))периодической десятичной дроби? В том виде в котором его вводят. Есть машинная эпсилон - 304 степень, больше ну никак. для остального придумали libgmp ---- Так что задача сводится к трём функциям: Работа с большими числами, Нахождение порядка мантиссы, Нахождение НОД, ну и мелочь всякя, типа упрощение дроби, умножение матриц... в общем уже пошли подсказки.
- дробная часть при деление, pavlinux, 00:38 , 18-Июл-12 (24)
- дробная часть при деление, LSTemp, 05:20 , 18-Июл-12 (30)
>>>>> вопрос решен или нет? жду ответа преподавателя ). >>>> или корректировки вопроса. >>> 1. Число рациональное: 108+(12021/12532), но оно не влезет в целый типа баша, >>> период 30 знаков, а чтоб определить повтор нужно хотя бы 61. >> Тссс! Не говори никому. Делимое-дедитель помещаются, и этого достаточно. > 108+(12021/12532) - эта дробь и в мозг влезет. > А я про это число, его только в матрицу и по кускам > - домножил, сравнил, запомнил, следующий,...- в каком формате входные данные на bash придут? эта мозгогребаная дробь как факт не может уже попасть в чистом виде на вход скрипта (и вручную ты до сто-пятьдесят-сотого знака не пропишешь это значение) - значит только в том виде, который ты сейчас дал... в текстовом (формат не важен) - смысл решения только на bash? это реальная задача или все же так - задание на лето? >[оверквотинг удален] > :) >> Вещественного с _округлением? Или :))периодической десятичной дроби? > В том виде в котором его вводят. Есть машинная эпсилон - > 304 степень, больше ну никак. > для остального придумали libgmp > ---- > Так что задача сводится к трём функциям: Работа с большими числами, Нахождение > порядка мантиссы, Нахождение НОД, > ну и мелочь всякя, типа упрощение дроби, умножение матриц... в общем уже > пошли подсказки. - дробная часть при деление, Andrey Mitrofanov, 18:33 , 18-Июл-12 (31)
Внимательно повторяю:>> Тссс! Не говори никому. Делимое-дедитель помещаются, и этого достаточно. #>> делимое <= делитель <= 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///
- дробная часть при деление, pavlinux, 05:21 , 24-Июл-12 (38) –1
> Задание на лето#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)- https://www.opennet.ru/openforum/vsluhforumID9/9467.html#20
- дробная часть при деление, LSTemp, 02:55 , 18-Июл-12 (25)
>>> вопрос решен или нет? жду ответа преподавателя ). >> или корректировки вопроса.СТОП!!! ))) Вопрос от Вас был задан (дополнительная задача на лето). И мне кажется я свой ответ довольно развернуто объяснил (дважды). То, что Вы подразумевали в конечном результате, роли не играет. Я хочу получить ответ, на свой ответ (тавтология - знаю). Изначально Ваша задача содержит противоречивые и взаимоисключающие математические термины (гениев в расчет не берем - они как раз для решения таких противоречий :). Решения Вашей задачи в предоставленных Вами условиях не существует. Признаете? Корректировки вопроса я не видел, вижу решение, которое мне пытаются показать, рассказывая очевидные вещи (в байте 8-бит итд - утрирую конечно - но суть такая же) ADD браузер подгюлчил (он у меня старенький) - теперь увидел тему, что сейчас число якобы стало иррациональным. увидел Ваш подход и некоторые решения. Математически - да. Практически, раз друге услови задачи не изменились - все равно - не решаемо (вернее решаемо, но напрямую связано с неадекватным гемороем битвы за этот результат в оставшихся ограничивающих условиях)
- дробная часть при деление, pavlinux, 05:43 , 19-Июл-12 (32)
>[оверквотинг удален] >>> или корректировки вопроса. > СТОП!!! ))) > Вопрос от Вас был задан (дополнительная задача на лето). И мне кажется > я свой ответ довольно развернуто объяснил (дважды). То, что Вы подразумевали > в конечном результате, роли не играет. > Я хочу получить ответ, на свой ответ (тавтология - знаю). Изначально Ваша > задача содержит противоречивые и взаимоисключающие математические термины (гениев в расчет > не берем - они как раз для решения таких противоречий :). > Решения Вашей задачи в предоставленных Вами условиях не существует. > Признаете?Вопроса было два: 1. Из того длинного числа с мантиссой найдти и показать период. 2. Вернуть дробь обратно. float -> int/int Число можешь представлять как хочешь, - массив, строка, два числа, число и массив,... Строгих два правила: Для вычислений НЕ юзать внешние утилиты и НЕ использовать строковое сравнение.
- дробная часть при деление, LSTemp, 23:20 , 21-Июл-12 (34)
>[оверквотинг удален] >> Я хочу получить ответ, на свой ответ (тавтология - знаю). Изначально Ваша >> задача содержит противоречивые и взаимоисключающие математические термины (гениев в расчет >> не берем - они как раз для решения таких противоречий :). >> Решения Вашей задачи в предоставленных Вами условиях не существует. >> Признаете? > Вопроса было два: > 1. Из того длинного числа с мантиссой найдти и показать период. > 2. Вернуть дробь обратно. float -> int/int > Число можешь представлять как хочешь, - массив, строка, два числа, число и > массив,...Эти условия ясны. Одно но (цитирую Вас - первоначальная постановка задачи): " Дополнительная задачка на лето :) Сие число является трансцендентным, но переводческим: 108.95(922438557293329077561442706670) " Трансцендентное и периодическое число являются взаимоисключающими математическими понятиями. Поэтому в этих условиях задача не решаема (я не знаю откуда Вы взяли число и почему описали его, как трансцендентное, указав при этом период. я вижу то, что вижу). Подтвердите это или скажите, что я не прав (я это уже раза 3-и спрашивал - ответа нет). > Строгих два правила: Для вычислений НЕ юзать внешние утилиты и НЕ использовать > строковое сравнение. Условия решения задачи понятны. Ее формулировка не ясна для меня до сих пор (я честно уже немного запутался в постах) - можно повторить специально для меня (заранее спасибо) :).
- дробная часть при деление, LSTemp, 03:29 , 18-Июл-12 (26)
>[оверквотинг удален] > период 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.
- дробная часть при деление, LSTemp, 04:39 , 18-Июл-12 (28)
>[оверквотинг удален] >> достаточно разделить на порядок, найти НОД и упростить дробь. >> напр. >> 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. снимаю вопрос - начальное ограничение было только СРАВНЕНИЕ строк не использовать.
- дробная часть при деление, LSTemp, 04:02 , 18-Июл-12 (27)
>[оверквотинг удален] > период 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 в знаменатель ставил для начала (для простоты)." https://www.opennet.ru/openforum/vsluhforumID9/9492.html#30 про интегралы на bash я конечно пошутил - решение задачи того не стоит.
- дробная часть при деление, pavlinux, 05:50 , 19-Июл-12 (33)
> про интегралы на bash я конечно пошутил - решение задачи того не стоит.Определённые - методом прямоугольников, неопределённые - по частям методом прямоугольников. :)
- дробная часть при деление, LSTemp, 23:26 , 21-Июл-12 (35)
>> про интегралы на bash я конечно пошутил - решение задачи того не стоит. > Определённые - методом прямоугольников, неопределённые - по частям методом прямоугольников. > :) Спасибо. Но я вообще-то об эффективности решения говорил. Можно и на ассемблере - все от задачи зависит (про Вашу я уже спрашивал - реальная/не_реальная/обучение/что-то еще?)
- дробная часть при деление, pavlinux, 04:14 , 22-Июл-12 (36)
> реальная/не_реальная/обучение/что-то еще?) Just for fun!!! Тут шастуют преподы универов, тырят отседа примеры задач для студентов. Можно гадость с подставой для обоих сделать. За одно и преподов обучим. :) Например мало кто юзает popd/push, -, shift, local, declare... А ваще, как месть JavaScript хоцца написать MP3 плеер. :)
- дробная часть при деление, LSTemp, 01:57 , 23-Июл-12 (37)
>> реальная/не_реальная/обучение/что-то еще?) > Just for fun!!! > Тут шастуют преподы универов, тырят отседа примеры задач для студентов. > Можно гадость с подставой для обоих сделать. За одно и преподов обучим. > :) > Например мало кто юзает popd/push, -, shift, local, declare... > А ваще, как месть JavaScript хоцца написать MP3 плеер. :) ))))))))) повеселило ) - одобрямс )
- дробная часть при деление, LSTemp, 04:56 , 18-Июл-12 (29)
>>> вопрос решен или нет? жду ответа преподавателя ). >> или корректировки вопроса. > 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; > ---
- _периодическая дробная при делениИ, Andrey Mitrofanov, 12:52 , 27-Июл-12 (39)
>> нужно посчитать (a-b)/c, чтобы дробная часть осталась. > Ура, зачёты и курсовые начались... Будем разминать моск!!! :D > Вспоминаем школу - деление столбиком. :) > #!/bin/bash > m=(); > Разминаем. Вот т-те твои "трансцедентные". - - - 8< - - - ./b.sh#!/bin/bashdiv() { 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<...] [I]$ ./b.sh 1365477 12532 1365477 / 12532 = 108.95(922438557293329077561442706670) real 0m0.023s user 0m0.020s sys 0m0.004s[/I] | [I]$ 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[/I] Когда './b.sh 1 31337' чё-т надолго задумался, основная процедура была переписана на awk (...8<... : потеряное при этом нарезание на стороки заменено самоцензурой): [I]$ 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[/I] ##$ ./b.sh 1 31337 ##...8<... Обобвал после : $ top |grep b.sh ... [I] 6789 yya 20 0 6472 3536 1108 R 100 0.1 51:48.86 b.sh[/I]
- quick fix. при делениИ, Andrey Mitrofanov, 12:57 , 27-Июл-12 (40)
Неудачи преследовалии.> - - - 8< - - - ./b.sh > (( (l+10+2*${#c})d == 0 )) && s="$s"$'\n' >- - - >8 - - - fixxed: (( (l+10+2*${#c})%64 == 0 )) && s="$s"$'\n' - _периодическая дробная при делениИ, pavlinux, 04:30 , 01-Авг-12 (41)
>>> нужно посчитать (a-b)/c, чтобы дробная часть осталась. >> Ура, зачёты и курсовые начались... Будем разминать моск!!! :D >> Вспоминаем школу - деление столбиком. :) > Разминаем. Вот т-те твои "трансцедентные".Молодец, ты победил, твоя лень меньше моей :)
|