gpt4 book ai didi

c++ - glm::vec3 精度 C++

转载 作者:行者123 更新时间:2023-11-27 23:02:09 33 4
gpt4 key购买 nike

我正在使用 glm 在 C++ 中创建碰撞检测系统图书馆。

我有一个定义为 std::vector<glm::vec3> vertices 的顶点数组以及计算 maxX、y、z 的函数,定义为

GLfloat AssetInstance::maxX()
{
GLfloat max = vertices.at(0).x;

for(glm::vec3 vertex : vertices)
if(vertex.x > max) max = vertex.x;

return max;
}

但是如果我运行下面的代码:

std::vector<glm::vec3> testVector;
testVector.push_back(glm::vec3(3.0500346, 1.0, 1.0));
testVector.push_back(glm::vec3(3.0500344, 2.0, 2.0));
testVector.push_back(glm::vec3(3.0500343, 3.0, 3.0));

std::cout << maxX(testVector) << std::endl;

输出为 3.05003

我认为 glm::vec3doubledouble比那更精确?有一个更好的方法吗?我的 maxX 没有返回足够精确的结果。

最佳答案

尝试 setprecision .默认情况下,它是 6,这是你得到的。

#include <iostream>
#include <iomanip>
#include <cmath>
#include <limits>
int main()
{
std::cout << "default precision (6): " << 3.0500346 << '\n';
std::cout << "std::precision(10): " << std::setprecision(10) << 3.0500346 << '\n';

return 0;
}

输出(Coliru link):

clang++ -std=c++14 -O2 -Wall -pedantic -pthread main.cpp && ./a.out
default precision (6): 3.05003
std::precision(10): 3.0500346

另一方面,您返回的 GLFloat 是一个 float ,而不是 double ,因此无论 glm 使用什么,您都将其转换为 float 。所以最终,调用 maxX 会给你浮点精度,而不是 double 。

P.S:查看文档似乎有一个 dvec 类型,这让我怀疑 vec 默认使用 double。

关于c++ - glm::vec3 精度 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26683033/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com