SERVING THE QUANTITATIVE FINANCE COMMUNITY

 
User avatar
pcaspers
Topic Author
Posts: 695
Joined: June 6th, 2005, 9:49 am

High Precision FP - Prototyping MSVC

December 8th, 2012, 6:46 pm

Hi,what is the easiest way to run existing c++ code in MSVC2010 with higher floating point precision than double ? I just want to see if it is worthwhile to move into that direction, so I do not want to change the compiler / use some external library.Any experience ?Thanks a lotPeter
 
User avatar
Polter
Posts: 2526
Joined: April 29th, 2008, 4:55 pm

High Precision FP - Prototyping MSVC

December 8th, 2012, 7:50 pm

http://randomascii.wordpress.com/2012/0 ... ision/grep for 80 (as in 80-bit), extended (as in extended precision), long double, controlfp (as in _controlfp_s -- _PC_64 is the mask you're interested in), D3DCREATE_FPU_PRESERVEHere's a handy chart:
Last edited by Polter on December 7th, 2012, 11:00 pm, edited 1 time in total.
 
User avatar
pcaspers
Topic Author
Posts: 695
Joined: June 6th, 2005, 9:49 am

High Precision FP - Prototyping MSVC

December 9th, 2012, 10:42 am

thanks very interesting indeed. And helpful.
 
User avatar
Cuchulainn
Posts: 61168
Joined: July 16th, 2004, 7:38 am
Location: Amsterdam
Contact:

Re: High Precision FP - Prototyping MSVC

December 27th, 2017, 12:30 pm

You can use Boost multiprecision. Here an example to compute [$]\pi[$].
BTW Archimedes of Syracuse probably invented Interval Arithmetic.

N, value: 20/3.141592653589662682701706171090774719985979379159334657412021084377287605362950884738001859546262235
 
Error: 3.9166728e-13
 
N, value: 40/3.141592653589793238462643264539730025868175440272163320532165222527356511645931880184364385214446692
 
Error: 3.5621932e-25
 
N, value: 60/3.141592653589793238462643383279502884089176205070734653848659243661099969287718976336684872480311458
 
Error: 3.2397958e-37
 
N, value: 80/3.14159265358979323846264338327950288419716939937500760173689723236079737032492766828422638159104739
 
Error: 2.9465771e-49
 
N, value: 100/3.141592653589793238462643383279502884197169399375105820974944502977939790038327551870396055373551631
 
Error: 2.6798963e-61
 
N, value: 120/3.141592653589793238462643383279502884197169399375105820974944592307816406204963949135527982537650455
 
Error: 2.4373515e-73
 
N, value: 140/3.141592653589793238462643383279502884197169399375105820974944592307816406286208998627960933400058354
 
Error: 2.2167583e-85
 
N, value: 160/3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117001
 
Error: 2.0161299e-97
 
N, value: 180/3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068
 
Error: 1.833314e-109
 
N, value: 200/3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068
 
Error: 3.6190453e-113
 
template <typename T>
 void ArchimedesPi(int N)
{ // N == number of iterations

 T three(3.0); T two(2.0);
 T an, anp1, bn, bnp1;
 an = 2.0*boost::multiprecision::sqrt(three); bn = T(three);

 for (int n = 1; n <= N; ++n)
 {
 // Take harmonic and geometric means
 anp1 = two*an*bn / (an + bn); 
 bnp1 = boost::multiprecision::sqrt(bn*anp1); 

 an = anp1; bn = bnp1;
 }

 std::cout << "N, value: " << std::setprecision(std::numeric_limits<T>::digits10)
 << N << "/" << bn << "\n\n";

 std::cout << "Error: " << std::setprecision(8)
 << boost::multiprecision::abs(bn - an) << "\n\n";
}

http://www.datasimfinancial.com
http://www.datasim.nl

Every Time We Teach a Child Something, We Keep Him from Inventing It Himself
Jean Piaget
ABOUT WILMOTT

PW by JB

Wilmott.com has been "Serving the Quantitative Finance Community" since 2001. Continued...


Twitter LinkedIn Instagram

JOBS BOARD

JOBS BOARD

Looking for a quant job, risk, algo trading,...? Browse jobs here...


GZIP: On