BML is a set of math related header-only C++ files that come with NxOgre. Licensed under the LGPL you can include it in your code if you so wish. This article is concerned however using it with NxOgre, and using it in your code.
Since bml is template based, NxOgre automatically sets up and uses several typedef classes;
Simply put, BML has very flexible functions
using namespace NxOgre;
Vec2 v2(1.0, -2.0f);
v2.set(3.14, 456789);
v2.y = 5;
v2.magnitude();
BML has several functions to quickly transfer the values between BML and your classes back and forth.
Using Ogre as an example.
NxOgre::Vec3 bml_vec3(1.0, 2.0, 3.0);
Ogre::Vector3 ogre_vector3(bml_vec3.as<Ogre::Vector3>());
BML to Ogre::Vector3
Ogre::Vector3 ogre_vector3(3.0, 4.0, 5.0);
NxOgre::Vec3 bml_vec3(ogre_vector3);
Ogre::Vector3 to BML