Вы здесь

bash скриптинг (смена типа переменной)

Вот собственно сам скрипт

0#!/bin/sh

1 eps=1
2 while [ $(($eps+1)) -gt 1 ]
3 do
4 eps=`echo $eps/2 | bc -l`
5 echo -n "eps=$eps"
6 done

после строчки №4 eps становится строкой с результатом .50000000000000
и соответсвенно не может продолжить цикл в строке 2,
так как 1 прибовляю строке.
подскажите как изменить тип на целочисленный. как eps после строки 4 сделать числом.

Форум: 

bash вообще не умеет работать с floating point :( а bc работает с той точностью, которая тебе нужна

#!/bin/bash
eps=1
while [ `echo "$eps + 1 > 1" | bc` != 0 ]; do
        eps=`echo "scale=10; $eps / 2" | bc`
        echo $eps
done

_________________
~? **!

_________________
~? **!

спасибо =)
слушай а как сделать чтоб bc все время делил с остатком....
а то в конце получаеться 0 =(
или етого на bash + bc нельзя добиться.
лучше писать на С?

просто есть идиотское задание

реализовать программу для просчёта машинного эпсилона, принцип:
эпс=1
while ((1+епс)>1) { епс=епс/2; }
print эпс;

я конечно понимаю что ето не эпсилон машинный... а просто "точность языка".
на баш наверно не получится реализовать?

Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.

Perl тоже вариант! :)

В мане на БЦ есть екзампл с циклами, определениями функций и все такое. Типа бс скриптинг. Ваша задача вычислительная . Тоесть бс вполне подходит. Шелл в этом случае играет роль сопряжения бс с остальным скриптом (если это необходимо), но никак не инструмента вычисления ибо муторно (но вполне возможно). Кстати строки парсить и разбирать в шелл скрипте иногда проще при помощи awk/sed нежели при помощи организации циклов в самом баше. В общем и целом нужно правильно подобрать инструмент чтобы менше скрипеть.