2014-10-14 1 views
0

Я написал этот код, чтобы найти квадратный корень из заданного числа x, но последняя часть дает мне «целочисленное выражение», что я могу сделать? (я оболочка/Баш нуб)Bash скрипт для поиска квадратного корня числа (вавилонский метод)

#bin/bash 
    2 clear 
    3 echo "Hello, we will calculate the square root of a number x" 
    4 echo "We're going to use the Babylonian Method" 
    5 echo "Give me a valor for x" 
    6 read x 
    7   if [ $x -lt 0 ] 
    8   then 
    9   clear 
10   echo "The roots of this number are imaginary" 
11   elif [ $x -eq 0 ] 
12   then 
13   clear 
14   echo "The square root of 0 is 0" 
15 else 
16   echo "Now give me a base b and a vertical height h so that bh=x" 
17   
18   echo "Give me b" 
19   read b 
20   echo "Give me h" 
21   read h 
22 fi 
23 
24   if [ $b -eq $h ] 
25   then 
26   echo:"b or h are already the square root of h" 
27   else 
28   until [ $b -eq $h ] 
29   do 
30   b=`echo "scale=3; ($b + $h)/2"|bc -l` 
31   h=`echo "scale=3; $x/$b"|bc -l` 
32   done 
33   fi 
34   echo "the square root of x is $b or $h" 
35 
+0

Не стесняйтесь взглянуть на: http://unix.stackexchange.com/q/155551/74329 – Cyrus

ответ

1

Bash может обрабатывать только целые числа. То же самое относится и к [ ... ] (проверьте man test):

INTEGER1 -eq INTEGER2 
    INTEGER1 is equal to INTEGER2 

Для сравнения поплавков, использовать bc, как вы уже правильно сделать для подсчета.

+0

Вы можете оказаться в бесконечном цикле из-за ограничений точности даже при использовании bc. Попробуйте ввести значения 15 3 2, например (после того, как вы изменили до-выражение для использования bc). – Rein

+0

Не могли бы вы объяснить мне, как? Я попытался сделать это, но без хороших результатов. – mobzopi

+0

Попробуйте что-нибудь вроде 'if [[1 == $ (bc -l <<<" $ b == $ h ")]]' – choroba

Смежные вопросы