Sponsored Content
Operating Systems OS X (Apple) Gobsmacked by ksh93 floating point arithmetic. Post 303024881 by wisecracker on Thursday 18th of October 2018 03:51:55 PM
Old 10-18-2018
Quote:
Originally Posted by Corona688
Interesting, a few obvious improvements.
  • You don't need $ on variable names inside (( ))
  • (( )) 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
Apologies for any typos...

1: True but we had a discussion about it on this site WRT shellcheck and I decided I was going to keep '$' due to discrepancies of some combinations.

Here:
A $(( expression )) bug?

2: The ksh version is of 2007 vintage and I assumed double parentheses (in the method you have used them) to be unavailable, however...
3: I never even thought about the && construct as I had no idea my incarnation would even remotely give reasonably accurate results.
4: 'typeset' is duly noted and will be used in COSINE soon. Good point about stomping on its own variable. As this was a prototype that point hadn't crossed my mind.
5: I tend to use global variables a great deal, even in Python, my mind tends to work globally. <wink>
6: Using the 'set' statement like you have done is completely new to me and is cool. Logged in the old grey matter for future use.
7: True and AudioScope has the mixture.
8: Negative values; love it, nice-n-simple. I was more interested in my code snippet working and I never expected anyone to strip it and better it so quickly. I will now put your code in the script and take it from there.

Not sure whether to use a modified version of the sin() section of the code as a whole for COS(X) or use the SIN(X) script and call it as SIN(X+90) for the same result.

Will experiment and find out over the next day or so.

------ Post updated at 08:51 PM ------

Quote:
Originally Posted by Corona688
A version that doesn't need the table:

Code:
        F=1     # N factorial
        for ((N=1; N<=13; ))
        do
                (( SIN += (ANGLE**N)/F ))
                ((F *= ++N))
                ((F *= - ++N))
        done

Neat, but...
I don't quite understand how this works.
Surely ((F *= - ++N)) would overwrite ((F *= ++N)), if NOT then I don't understand why?
Please explain...

Last edited by wisecracker; 10-18-2018 at 05:18 PM.. Reason: No idea why a separate post has become an edit on a previuos one!
 

10 More Discussions You Might Find Interesting

1. Programming

floating point problem

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)
Discussion started by: vijlak
4 Replies

2. Shell Programming and Scripting

Rounding off the value of Floating point value

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)
Discussion started by: damansingh
7 Replies

3. Linux

Floating Point Exception

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)
Discussion started by: Mandar123
3 Replies

4. Programming

Floating point Emulator

what is floating point emulator(FPE)? where and why it is used? (1 Reply)
Discussion started by: pgmfourms
1 Replies

5. Shell Programming and Scripting

how to compare 2 floating point no.

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)
Discussion started by: useless79
1 Replies

6. Shell Programming and Scripting

floating point numbers in if

# if > then > echo "1" > else > echo "2" > fi -bash: How can i compare floating point numbers inside statement? (15 Replies)
Discussion started by: proactiveaditya
15 Replies

7. Shell Programming and Scripting

Arithmetic in floating point

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)
Discussion started by: sumit the cool
6 Replies

8. Programming

Floating Point

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)
Discussion started by: Slasho
9 Replies

9. Shell Programming and Scripting

floating point arithmetic operation error

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)
Discussion started by: piynik
2 Replies

10. Shell Programming and Scripting

BC calculation for floating (invalid arithmetic operator )

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)
Discussion started by: alvintiow
10 Replies
All times are GMT -4. The time now is 07:08 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy