Sponsored Content
Top Forums Shell Programming and Scripting Calculate the constant e to 14+ decimal places using integer maths. Post 303039716 by wisecracker on Sunday 13th of October 2019 10:40:33 AM
Old 10-13-2019
Calculate the constant e to 14+ decimal places using integer maths.

Hi guys...

I am loving this integer maths thing.
64 bit systems are certainly easier than 32 bit, but hey, I don't intend to leave out my fav' platform.
Using one of the 'Brothers' methods, URL inside the code.
Code:
#!/bin/sh
#
# #!/usr/local/bin/dash
# e_constant.sh
# Brother's formula [2].
# http://www.brotherstechnology.com/math/e-formulas.html
# e=2.718281828459045 from Python 3.8.0.
# Google's value, e=2.71828182846.
#
# For *NIX 64 bit or greater systems, 32 bit systems commented out.
# (Also tested on AMIGA OS_3.1 using ADE the UNIX emulator and ksh88.)

echo ""
echo "Calculate e to 14+ decimal places, 64 bit, (7+ decimal places, 32 bit),"
echo "integer maths inside 'dash' or 'sh'."
echo ""

initial_e=0

# 32 bit version for AMIGA ADE.
# e=200000000

# Default 64 bit version.
e=2000000000000000
k=0
factorial=1
diff=$(( e - initial_e ))
while [ ${diff} -gt 1 ]
do
    initial_e=${e}
    k=$(( k + 1 ))
    factorial=$(( factorial * 2 * k * (2 * k + 1) ))

    # 32 bit version.
    # e=$(( e + (((2 * k + 2) * 100000000) / factorial) ))

    # Default 64 bit version.
    e=$(( e + (((2 * k + 2) * 1000000000000000) / factorial) ))
    diff=$(( e - initial_e ))
done

# 32 bit version.
# printf "%.8f\n" $(( e ))e-8

# Default 64 bit version.
result=$( printf "%.15f\n" $(( e ))e-15 )
# Result: 2.718281828459041
echo "${result}"

echo ""
echo "Python 3.8.0 value, e = 2.718281828459045."
echo "Number of iterations = ${k}."
echo ""

Result in 64 bit mode, my usual platform.
Code:
Last login: Sun Oct 13 15:21:17 on ttys000
AMIGA:amiga~> cd Desktop/Code/Shell
AMIGA:amiga~/Desktop/Code/Shell> ./e_constant.sh

Calculate e to 14+ decimal places, 64 bit, (7+ decimal places, 32 bit),
integer maths inside 'dash' or 'sh'.

2.718281828459041

Python 3.8.0 value, e = 2.718281828459045.
Number of iterations = 9.

AMIGA:amiga~/Desktop/Code/Shell> _

These 2 Users Gave Thanks to wisecracker For This Post:
 

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

trimm up the decimal places in output

I have a perl script that reports the avg time of a application call and the total number of calls. This works fine, however I would like to trim the number of decimal places reported from 12 to like 3 and I don't know how. Any suggestions? Here is what I use to get the avg time... for $eRef (... (2 Replies)
Discussion started by: theninja
2 Replies

2. Shell Programming and Scripting

Four decimal places with awk

i have a script in which awk prints "($2-1700)/10000" and the answer is -0.07,but i want the answer in 4 decimal places. that is -0.0700. How can i sue awk to get my results in four decimal places (4 Replies)
Discussion started by: tomjones
4 Replies

3. Shell Programming and Scripting

Decimal places

i need to multiplay a number with 1.00.. so that the output should contain two decimal places at end.. for example... 236 * 1.00 = 236.00 245.8 * 1.00 = 245.80 but when i perform multiplication it shows output as. 236 245.8 can anyone help me to get the actual output of... (11 Replies)
Discussion started by: arunmanas
11 Replies

4. Shell Programming and Scripting

Using IF statements with maths where the input is not an integer

Hi All I've made a few scripts which using GDAL extract the value of a pixel within a given raster. The purpose is to work out the combine value of every pixel. I thought there may have been an easier way to do this but alas! The code below extracts the pixel value at position X Y. The... (3 Replies)
Discussion started by: StudentFitz
3 Replies

5. Shell Programming and Scripting

Arithmetic but keep 2 decimal places

I am trying to perform arithmetric, for example, to increment the value of variable $a (say 3) by 0.05 but when I tried the following expression let a=a+0.05 or a=$((a+0.05)) both returned 3.0499999999999998 I want to keep 2 decimal places so it returns 3.05 instead. (6 Replies)
Discussion started by: piynik
6 Replies

6. Shell Programming and Scripting

Bash Rounding to 2 decimal places

I have a number in a bash variable n, and want to round it to 2 decimal places. How can I do that? n=0.0867268 Need to have num=0.09 (1 Reply)
Discussion started by: kristinu
1 Replies

7. Shell Programming and Scripting

How to round up value upto 2 decimal places using sed?

Please help me in rounding up value upto 2 decimal palces using sed command #!/usr/bin/bash a=15.42 b=13.33 c=`echo $a*$b |bc -l` echo $c above code is is giving output "205.5486" but i want the output as "205.55" Thank you... (15 Replies)
Discussion started by: ranabhavish
15 Replies

8. Shell Programming and Scripting

Printing with decimal places from last 4 digits

I have input file like below, 201424|9999|OSS|622010|RGT|00378228764 201424|8888|OM|587079|RGT|00284329675 201424|7777|OM|587076|RGT|00128671024 201424|6666|OM|581528|RGT|00113552084 Output should be like below, should add decimal (.) from last 4 digits. ... (2 Replies)
Discussion started by: vinothsekark
2 Replies

9. Shell Programming and Scripting

Sum the fields with 6 decimal places - getting only 2 decimal places as output

I used the below script to Sum up a field in a file based on some unique values. But the problem is when it is summing up the units, it is truncating to 2 decimals and not 6 decimals as in the input file (Input file has the units with up to 6 Decimals – Sample data below, when the units in the 2... (4 Replies)
Discussion started by: brlsubbu
4 Replies
DATEFMT_SET_LENIENT(3)							 1						    DATEFMT_SET_LENIENT(3)

IntlDateFormatter::setLenient - Set the leniency of the parser

	Object oriented style

SYNOPSIS
public bool IntlDateFormatter::setLenient (bool $lenient) DESCRIPTION
Procedural style bool datefmt_set_lenient (IntlDateFormatter $fmt, bool $lenient) Define if the parser is strict or lenient in interpreting inputs that do not match the pattern exactly. Enabling lenient parsing allows the parser to accept otherwise flawed date or time patterns, parsing as much as possible to obtain a value. Extra space, unrecognized tokens, or invalid values ("February 30th") are not accepted. PARAMETERS
o $fmt - The formatter resource o $lenient - Sets whether the parser is lenient or not, default is TRUE (lenient). RETURN VALUES
Returns TRUE on success or FALSE on failure. EXAMPLES
Example #1 datefmt_set_lenient(3) example <?php $fmt = datefmt_create( 'en_US', IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'America/Los_Angeles', IntlDateFormatter::GREGORIAN, 'dd/MM/yyyy' ); echo 'lenient of the formatter is : '; if ($fmt->isLenient()) { echo 'TRUE'; } else { echo 'FALSE'; } datefmt_parse($fmt, '35/13/1971'); echo " Trying to do parse('35/13/1971'). Result is : " . datefmt_parse($fmt, '35/13/1971'); if (intl_get_error_code() != 0) { echo " Error_msg is : " . intl_get_error_message(); echo " Error_code is : " . intl_get_error_code(); } datefmt_set_lenient($fmt, false); echo " Now lenient of the formatter is : "; if ($fmt->isLenient()) { echo 'TRUE'; } else { echo 'FALSE'; } datefmt_parse($fmt, '35/13/1971'); echo " Trying to do parse('35/13/1971'). Result is : " . datefmt_parse($fmt, '35/13/1971'); if (intl_get_error_code() != 0) { echo " Error_msg is : ".intl_get_error_message(); echo " Error_code is : ".intl_get_error_code(); } ?> Example #2 OO example <?php $fmt = new IntlDateFormatter( 'en_US', IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'America/Los_Angeles', IntlDateFormatter::GREGORIAN, 'dd/MM/yyyy' ); echo 'lenient of the formatter is : '; if ($fmt->isLenient()) { echo 'TRUE'; } else { echo 'FALSE'; } $fmt->parse('35/13/1971'); echo " Trying to do parse('35/13/1971'). Result is : " . $fmt->parse('35/13/1971'); if (intl_get_error_code() != 0) { echo " Error_msg is : " . intl_get_error_message(); echo " Error_code is : " . intl_get_error_code(); } $fmt->setLenient(FALSE); echo " Now lenient of the formatter is : "; if ($fmt->isLenient()) { echo 'TRUE'; } else { echo 'FALSE'; } $fmt->parse('35/13/1971'); echo " Trying to do parse('35/13/1971'). Result is : " . $fmt->parse('35/13/1971'); if (intl_get_error_code() != 0) { echo " Error_msg is : " . intl_get_error_message(); echo " Error_code is : " . intl_get_error_code(); } ?> The above example will output: lenient of the formatter is : TRUE Trying to do parse('35/13/1971'). Result is : 66038400 Now lenient of the formatter is : FALSE Trying to do parse('35/13/1971'). Result is : Error_msg is : Date parsing failed: U_PARSE_ERROR Error_code is : 9 SEE ALSO
datefmt_is_lenient(3), datefmt_create(3). PHP Documentation Group DATEFMT_SET_LENIENT(3)
All times are GMT -4. The time now is 03:59 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy