将glm::vec3与boost多精度浮点相乘
Multiply glm::vec3 with boost multiprecision float
Boost为浮点值提供了一个多精度库,这非常棒,但glm不允许将其与向量或矩阵相乘,因为它不知道它是什么。
因此,下面的代码不会编译:
#include <boost/multiprecision/cpp_dec_float.hpp>
#include <glm/glm.hpp>
int main()
{
typedef boost::multiprecision::cpp_dec_float_50 mp_float;
float a = 0.1f;
mp_float b = 0.1f;
glm::vec3 foo(1.f,1.f,1.f);
glm::vec3 v1 = a * foo; // OK
glm::vec3 v2 = b * foo; // COMPILER ERROR
}
有没有一种方法可以在不必编写类包装器和运算符重载成员函数的情况下实现这一点?(我真的很想避免这种情况)
或者,如果有人知道另一种用glm和高精度数字相乘的方法,我会很感激
感谢
您可以在没有包装类的情况下重载运算符:
glm::vec3 operator *(mp_float f, glm::vec3 v) {
// ...
}
不过,请注意,glm::vec3
只保存正常的float
s,因此无论如何操作,都会丢失一些精度。
似乎其他库不接受多精度。。
模板将保存大量代码,但最终,必须专门用于不同的操作!此外,当mp_float与T相乘时,可能会出现同样的问题,如果T是float,则返回阶段0!
到目前为止,最好的方法是避免在glm库中使用boost多精度,并使用numeric_limits和将数字四舍五入到小数点后6位来控制精度。
这就是我最终使用的东西,它就像一个符咒!
相关文章:
- 如何打印boost多精度128位无符号整数
- boost多精度cpp_int的最高限制是多少
- 无法在 Windows 上使用英特尔编译器编译示例 boost::多精度
- 使用boost多精度的数学精度问题
- C++:使用一对(cpp_int,int)整数作为无序映射中的键(其中cpp_int是boost多精度整数)
- 为什么 boost::geometry::d istance 使用 model::d 2::p oint_xy<float> 返回双精度而不是浮点数?
- 使用 Boost.Random 从种子生成多精度整数
- 将glm::vec3与boost多精度浮点相乘
- 如何在 AIX 6.1 上编译 boost 1.56 多精度,不带 C++11
- 如何使用boost::multiprecision在运行时更改数字精度
- 修正了boost::posix_time::ptime的精度
- Boost多精度:递归模板实例化超过最大长度256
- 使用boost-lib的更高精度浮点(高于16位)
- 如何将双精度的Boost uBLAS矢量与复数双因子相乘
- python使用BOOST浮点到c++双精度
- boost多精度库与模数不一致
- 使用Boost.单位和boost .多精度
- 如何编写用于boost序列化的双精度包装器
- Boost Rcpp (BH封装)多精度
- 在boost中定义多精度pi:多精度