(( )) replaces [ ] for integer mathematics, especially float
The && construct will tremendously reduce redundancy here
You should use typeset to declare a local variable, otherwise you're unintentionally stomping on each other's ANGLE all the time
You should not be using global variables for all communication
You can make that giant equation one short loop
Not everything needs to be a function, many things are shorter and more readable as the single value they are
A bit more sanitization for negative input values
Code:
#!/bin/ksh
e=2.71828182845904523
PI=3.14159265358979323
TORADIANS=$(( PI/180.0 )) # Correction for degrees to radians
TODEGREES=$(( 180.0/PI )) # Correction for radians to degrees
# SIN fixed to 8 decimal places.
Sin()
{
typeset ANGLE var # Tell KSH ANGLE is local
typeset SIN var # Also local
ANGLE="$1"
SIN=0.0
while (( ANGLE < 0.0 ))
do
(( ANGLE += 360 ))
done
while (( ANGLE >= 360.0 )) # Too bad KSH doesn't have fmod
do
(( ANGLE -= 360.0 ))
done
(( ANGLE > 270.0 )) && (( ANGLE -= 360 ))
(( ANGLE > 180.0 )) && ANGLE=$((-(ANGLE-180)))
(( ANGLE > 90.0 )) && ANGLE=$(( 180 - ANGLE ))
(( ANGLE *= TORADIANS )) # Convert to radians
# Series coefficients, for the sum of A to the $1 divided by $2 for each pair
# Sets $1=1, $2=1.0, $3=3, $4=-6.0, etc
set -- 1 1.0 \
3 -6.0 \
5 120.0 \
7 -5040.0 \
9 362880.0 \
11 -39916800 \
13 6227020800.0
while [ "$#" -gt 0 ]
do
# We DO need $ here since $1, $2, etc are special
(( SIN += (ANGLE**$1)/$2 ))
shift 2 # Discard the first two arguments
done
printf "%.8f\n" "$SIN"
}
# Test degrees.
for x in $( seq 0.0 15.0 360.0 )
do
printf "%d\t" $x
Sin $x
done
Last edited by Corona688; 10-18-2018 at 01:43 PM..
Hi all!
Hi all!
I am working with a problem to find the smallest floating point number that can be represented.
I am going in a loop ,stating with an initial value of 1.0 and then diving it by 10 each time thru the loop.
So the first time I am getting o.1 which I wanted.But from the next... (4 Replies)
Hello,
i have some variables say:
x=1.4
y=3.7
I wish to round off these values to :
x = 2 (after rounding off)
y = 4 (after rounding off)
I am stuck.
Please help. (7 Replies)
Hi,
I am compiling "HelloWorld" C progam on 32-bit CentOS and i want to execute it on 64-bit CentOS architecture.
For that i copied the a.out file from 32-bit to 64-bit machine, but while executing a.out file on 64bit machine I am getting "Floating point exception error".
But we can run... (3 Replies)
Hi,
Could any one tell me how to compare to floating point no. using test command. As -eq option works on only intergers.
i=5.4
if
then
echo "equal"
else
echo "not equal"
fi
here output will be equal even though no. are unequal.
Thanks,
ravi (1 Reply)
is it not possible to simply di aritmetic without using bc or awk
i have tried folllowing operatrions but they support only integer types plz suggest me code for floating using values stored in the variables.the ans i get is integer and if i input floating values i get error numeric constant... (6 Replies)
Anyone help me i cant found the error of floating point
if needed, i added the code complete
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
typedef struct
{
int hh;
int mm;
int ss;
char nom;
int punt;
}cancion;
typedef struct... (9 Replies)
I am writing a script in zsh shell, it fetchs a number from a file using the awk command, store it as a variable, which in my case is a small number 0.62000. I want to change this number by multiplying it by 1000 to become 620.0 using the command in the script
var2=$((var1*1000))
trouble is... (2 Replies)
Hi,
I wish to compare the CPU LOAD 1 min with 5mins and 15mins.
If 1 min's CPU LOAd spike 3% compare to 5 mins or 15 mins CPU Load, it is warning.
If 1 min's CPU LOAd spike 5% compare to 5 mins or 15 mins CPU Load, it is critical.
However I received following code error, I google it and... (10 Replies)