Προς το περιεχόμενο

bash shell script, αριθμητικές παραστάσεις


toyotaki

Προτεινόμενες αναρτήσεις

Θέλω να υπολογίσω την εξής παράσταση result = log2[(c * b ) / (d * a)], το 2 είναι η βάση

Ξεκίνησα με το να υπολογίσω αρχικά τους πολλάπλασιασμούς και επειδή κατάλαβα ότι δούλευαν σωστά δοκίμασα να υπολογίσω σχεδόν ολόκληρη την παράσταση εκτελώντας

>result=`expr (($c \* $ / ($d \* $a))`

όμως βγάζει σφάλμα

>syntax error near unexpected token `$c'

Υποθέτω ότι δεν αναγνωρίζει τις παρενθέσεις. Αυτό σημαίνει ότι θα πρέπει να σπάσω την παράσταση και να εκτελώ μία μία τις πράξεις ή υπάρχει κάποιος άλλος τρόπος;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Μήπως ξέρει κανείς πώς να υπολογίσω το log με βάση 2; Διάβασα ότι γίνεται με χρήση του bc αλλά δεν κατάφερα να το κάνω να δουλέψει. Μπορώ να το βάλω μαζί με τον υπολογισμό της παραπάνω παράστασης ή καλύτερα να το έχω ξεχωριστά;

 

Τελικά μου δούλεψε αλλά δεν ξέρω αν είναι σωστή η σύνταξη

>outcome=$(echo "scale=2; l($result)" | bc -l)

Μπορεί να μου επιβεβαιώσει κάποιος την ορθότητά του;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Μήπως ξέρει κανείς πώς να υπολογίσω το log με βάση 2; Διάβασα ότι γίνεται με χρήση του bc αλλά δεν κατάφερα να το κάνω να δουλέψει. Μπορώ να το βάλω μαζί με τον υπολογισμό της παραπάνω παράστασης ή καλύτερα να το έχω ξεχωριστά;

 

a=1

b=2

c=4.5

d=3

 

echo "l(($c*$b )/($d*$a))/l(2)"|bc -l

 

=1.58496250072115618146 (log23)

 

Γενικά logx(y) = log(y)/log(x).

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δοκίμασα αυτό τον τρόπο:

a=1

b=2

c=4.5

d=3

 

echo "l(($c*$b )/($d*$a))/l(2)"|bc -l

 

=1.58496250072115618146 (log23)

 

Γενικά logx(y) = log(y)/log(x).

όμως τα αποτελέσματα που παίρνω από τα δικά μου νούμερα είναι:

 

>-.09905867072266786554
.26328166185991635721

όπου αν πάω να τα προσθέσω μετά μου εμφανίζει μήνυμα για non-numeric argument

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

>sum=`expr $sum + $outcome`

όπου outcome είναι το αποτέλεσμα -.09905867072266786554 ή .26328166185991635721 ή .42298428013586354899

όταν είναι θετικοί κάνει πράξη όταν βλέπει τον αρνητικό βγάζει το μήνυμα non-numeric argument

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

>sum=`expr $sum + $outcome`

όπου outcome είναι το αποτέλεσμα -.09905867072266786554 ή .26328166185991635721 ή .42298428013586354899

όταν είναι θετικοί κάνει πράξη όταν βλέπει τον αρνητικό βγάζει το μήνυμα non-numeric argument

 

Η expr παίρνει μόνο ακεραίους, οπότε κάνε την πρόσθεση με την bc.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Προσπάθησα να το υλοποιήσω σε java όπου θα δίνω κάθε φορά σαν παραμέτρους το sum και την τιμή από τον λογάριθμο

αλλά και πάλι μου βγάζει σφάλματα.

 

>javac Sum.java
sum=`java Sum $sum $outcome`

 

>public class Sum
{
    public static void main(int args[])
    {
int sum = args[0];
int logarithmm = args[1];
sum = sum + logarithm;

System.out.print(sum);
    }
}

 

 

Σφάλματα:

cannot find symbol

symbol : variable logarithm

location: class Sum

sum = sum + logarithm;

^

operator + cannot be applied to int,logarithm

sum = sum + logarithm;

^

incompatible types

found : <nulltype>

required: int

sum = sum + logarithm;

^

 

Η expr παίρνει μόνο ακεραίους, οπότε κάνε την πρόσθεση με την bc.

 

Δοκίμασα αυτό:

>sum=0
sum=`$echo "$sum+$outcome" | bc`

και έβγαλε αυτό σαν αποτέλεσμα

> 0+-.09905867072266786554: command not found

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...