Solved

PI

Posted on 1998-12-16
9
337 Views
Last Modified: 2010-04-16
VC5, WinNT4.0

I know that #define PI      3.14159 would be good enough in my programme.

Does it make any sense if i do something like this?
What is the effect on the compiler/linker ?

#define PI      3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679



Leow  
0
Comment
Question by:engllf
  • 5
  • 3
9 Comments
 
LVL 22

Accepted Solution

by:
nietod earned 50 total points
ID: 1180261
first of all, don't use #define to define constatnts in C++, that has been replaced with a safer mechansim

const double PI = 3.14.....

To answer your question, if you make it longer, you will have automatically more accuracy if you port the program to a system that has floating point numbers with additional accuracy.  
0
 
LVL 1

Expert Comment

by:The_Brain
ID: 1180262
It would depending on.  
The calculation which you are doing.

for instance

void main()
{
  float answer;
  cout<<answer*PI;
}

it would be 12 dec places.  I not sure about that.  you can set it cout.precision(x);
don't use define though.  use const double Pi=3.14159 etc

but if not float, if double then 18 digits precision by default.

So if you use your define, then float would be appropiate.
else define it more accurately, (because)
cout<<PI+(double)
3.14159000000000
etc.

so be more accurate for double 18 dec places is enough. float 11-12 is enough. etc.  it depend on what you want to do.  for the sake of accuracy more dec places is better.  not more than 18, that would be useless.

0
 
LVL 22

Expert Comment

by:nietod
ID: 1180263
you can also get the desited accuracy using an expression, like

const double PI = acos(-1);


0
Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

 
LVL 22

Expert Comment

by:nietod
ID: 1180264
>> for the sake of accuracy more dec places is better.  not more than 18, that would be useless
The C++ standard only defines minimum requirements on the accuracy of floating point values.  Some implimentations may define more accurate floating point values.  Many mainframes have 16 byte floating point numbers that have accuracy greater than 30 decimal digits. (That is what mainframes are still used for.)
0
 
LVL 1

Expert Comment

by:The_Brain
ID: 1180265
Ok fine, pick the easy way out of defining PI :)
acos(-1), fine be like that :):):):)
0
 
LVL 10

Expert Comment

by:RONSLOW
ID: 1180266
have a look at

http://snippets.org/#section1group11

Various ways of computing PI to ridiculous lengths

acos(-1) cannot be used globally, because acos(-1) is not a constant expression.  Or am I mistaken here?

0
 
LVL 1

Expert Comment

by:The_Brain
ID: 1180267
yup.
acos(-1) is a constant expression. don't be ridiculous, if I am wrong please as a mathemitician and programmer i would LOVE to see why.... I am very interested. :)
0
 
LVL 22

Expert Comment

by:nietod
ID: 1180268
you can use

const int PI = acos(-1);

globally.  There is not guarantee that the acost(-1) will be calculated at compile time and embedded as a constant like it would be with

const int PI = 3.14159;

but if, not it will be calculated one time at program start-up which is not big deal.
0
 
LVL 22

Expert Comment

by:nietod
ID: 1180269
engulf, are you going to grade this question?
0

Featured Post

Networking for the Cloud Era

Join Microsoft and Riverbed for a discussion and demonstration of enhancements to SteelConnect:
-One-click orchestration and cloud connectivity in Azure environments
-Tight integration of SD-WAN and WAN optimization capabilities
-Scalability and resiliency equal to a data center

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Many modern programming languages support the concept of a property -- a class member that combines characteristics of both a data member and a method.  These are sometimes called "smart fields" because you can add logic that is applied automaticall…
Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilation…
The goal of the video will be to teach the user the concept of local variables and scope. An example of a locally defined variable will be given as well as an explanation of what scope is in C++. The local variable and concept of scope will be relat…
The viewer will learn how to user default arguments when defining functions. This method of defining functions will be contrasted with the non-default-argument of defining functions.

830 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question