Solved

I need to manage more than 15 digits of precision in my Visual C++ program and libraries

Posted on 2011-02-28
7
363 Views
Last Modified: 2012-05-11
Hi,

I have a program and libraries written in Visual C++ 2005 where i use variables of type double. So far i have been working with this data type with the maximum 15 digits of precision but now i have a request from my customer for supporting 16, 17 and more digits of precision. I don't know how to do this or even if that is possible.

What can i do?
Should i use the boost libraries?
Write my own type and change the data types all over the code (thousands of lines involved) ?

Thanks and regards,

Johann
0
Comment
Question by:JohannRamon
7 Comments
 
LVL 86

Accepted Solution

by:
jkr earned 500 total points
ID: 35002856
It's definitely possible - check out e.g.

NTL (http://www.shoup.net/ntl/): arbitrary length integers, vectors/matrices/polynomials over integers and over finite fields.
Apfloat (http://www.apfloat.org/apfloat/): a C++ High Performance Arbitrary Precision Arithmetic Package
MUNTL (http://sourceforge.net/projects/muntl/): Multiprecision unsigned number template library
LiDIA (http://www.cdc.informatik.tu-darmstadt.de/TI/LiDIA/): A library for computational number theory. Provides a collection of highly optimized implementations of various multiprecision data types and time-intensive algorithms.
0
 
LVL 33

Expert Comment

by:sarabande
ID: 35005249
it would be not so difficult to use own type highdouble instead of double in your code. you can do such a substitution in very short time with case sensitive and full-word replacement. then make a central typedef double highdouble; and your programs should build. you then can decide how to implement highdouble, either made by your own for example based on 64-bit integer or using an appropriate type of a foreign library as base.

Sara
0
 
LVL 2

Author Comment

by:JohannRamon
ID: 35017500
Hi,

Thanks for the prompt answers!

jkr: I have checked the libraries and so far NTL types (xdouble or RR) look like my best solution. It looks like the library i already have "boost" doesn't have an appropriate data type.

Sara: It looks like the best path for this large amount of code is the search-replace of the data type. If i include the foreign library it would still be necessary to make the "typedef double highdouble"?

Thanks again and regards,

Johann
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 33

Expert Comment

by:sarabande
ID: 35019713
you probably then would replace the typedef by

   typedef  long_double_from_library highdouble;

or in case the new (class) type would not provide an interface so that it could substitute a double, you would implement the type highdouble yourself taking the type from the library as a base.

Sara
0
 
LVL 2

Author Comment

by:JohannRamon
ID: 35060797
Hi,

Funny as it sounds, my management wants a "commercial" solution because they feel it is necessary to have a "provider" which can give us support and warranties backed up with a contract (the perceived risk of precision errors is too high for us to assume it alone).

I´m sorry for this added condition. Any suggested option?

Thanks again and regards,

Johann
0
 
LVL 53

Expert Comment

by:Dhaest
ID: 35321646
This question has been classified as abandoned and is being closed as part of the Cleanup Program. See my comment at the end of the question for more details.
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

Displaying an arrayList in a listView using the default adapter is rarely the best solution. To get full control of your display data, and to be able to refresh it after editing, requires the use of a custom adapter.
This is about my first experience with programming Arduino.
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Bot…

860 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