Elementary Functions
Elementary Functions QuickStart Sample (Managed C++)
Illustrates the use of the elementary functions implemented by the
Elementary class in Managed Extensions for C++.
C# code VB.NET code Back to QuickStart Samples
// This is the main project file for VC++ application project // generated using an Application Wizard.#include "stdafx.h"#using <mscorlib.dll> using namespace System; // We use many classes from the Extreme.Mathematics namespace.using namespace Extreme::Mathematics; // Illustrates the use of the elementary functions implemented// by the ElementaryFunctions class in the Extreme.Mathematics.Curve namespace of // Numerics.NET.int _tmain() { // This QuickStart sample deals with elementary // functions, implemented in the ElementaryFunctions class. // // ElementaryFunctions functions // // Evaluating Log(1+x) directly causes significant // round-off error when x is close to 0. The // Log1PlusX function allows high precision evaluation // of this expression for values of x close to 0: Console::WriteLine("Logarithm of 1+1e-12"); Console::WriteLine(" Math.Log: {0}", __box(Math::Log(1+1e-12))); Console::WriteLine(" Log1PlusX: {0}", __box(ElementaryFunctions::Log1PlusX(1e-12))); // In a similar way, Exp(x) - 1 has a variant, // ExpXMinus1, for values of x close to 0: Console::WriteLine("Exponential of 1e-12 minus 1."); Console::WriteLine(" Math.Exp: {0}", __box(Math::Exp(1e-12) - 1)); Console::WriteLine(" ExpMinus1: {0}", __box(ElementaryFunctions::ExpMinus1(1e-12))); // The hypotenuse of two numbers that are very large // may cause an overflow when not evaluated properly: Console::WriteLine("Hypotenuse:"); double a = 3e200; double b = 4e200; Console::Write(" Simple method: "); try { double sumOfSquares = a*a + b*b; Console::WriteLine(__box(Math::Sqrt(sumOfSquares))); } catch (OverflowException *) { Console::WriteLine("Overflow!"); } Console::WriteLine(" ElementaryFunctions::Hypot: {0}", __box(ElementaryFunctions::Hypot(a, b))); // Raising numbers to integer powers is much faster // than raising numbers to real numbers. The // overloaded Pow method implements this: Console::WriteLine("2.5^19 = {0}", __box(ElementaryFunctions::Pow(2.5, 19))); // You can raise numbers to negative integer powers // as well: Console::WriteLine("2.5^-19 = {0}", __box(ElementaryFunctions::Pow(2.5,-19))); Console::Write("Press Enter key to exit..."); Console::ReadLine(); return 0; }