Browse Source

Math: added sqrt() overload for Dual.

pull/7/head
Vladimír Vondruš 13 years ago
parent
commit
f1da7a08b4
  1. 14
      src/Math/Dual.h
  2. 6
      src/Math/Test/DualTest.cpp

14
src/Math/Dual.h

@ -19,6 +19,7 @@
* @brief Class Magnum::Math::Dual
*/
#include <cmath>
#include <Utility/Debug.h>
#include "Math/MathTypeTraits.h"
@ -191,6 +192,19 @@ template<class T> Corrade::Utility::Debug operator<<(Corrade::Utility::Debug deb
return debug;
}
/** @relates Dual
@brief Square root of dual number
@f[
\sqrt{\hat a} = \sqrt{a_0} + \epsilon \frac{a_\epsilon}{2 \sqrt{a_0}}
@f]
@see Math::sqrt(const T&)
*/
template<class T> Dual<T> sqrt(const Dual<T>& dual) {
T sqrt0 = std::sqrt(dual.real());
return {sqrt0, dual.dual()/(2*sqrt0)};
}
}}
#endif

6
src/Math/Test/DualTest.cpp

@ -33,6 +33,7 @@ class DualTest: public Corrade::TestSuite::Tester {
void multiplyDivide();
void conjugated();
void sqrt();
void debug();
};
@ -49,6 +50,7 @@ DualTest::DualTest() {
&DualTest::multiplyDivide,
&DualTest::conjugated,
&DualTest::sqrt,
&DualTest::debug);
}
@ -104,6 +106,10 @@ void DualTest::conjugated() {
CORRADE_COMPARE(Dual(1.0f, -6.5f).conjugated(), Dual(1.0f, 6.5f));
}
void DualTest::sqrt() {
CORRADE_COMPARE(Math::sqrt(Dual(16.0f, 2.0f)), Dual(4.0f, 0.25f));
}
void DualTest::debug() {
std::ostringstream o;

Loading…
Cancel
Save