qSin()给出错误的sin值
qSin() giving wrong sin values?
我有代码:
for(int i = 0; i < 314; i++){
float nextSine = aSin(i/5);
qDebug() << "i: "<<QString::number(i)<<" sin(i/5) = nextSine: "<<nextSine;
}
这是我得到的结果的一个样本:
i: "303" sin(i/5) = nextSine: -0.304811
i: "304" sin(i/5) = nextSine: -0.304811
i: "305" sin(i/5) = nextSine: -0.966118
i: "306" sin(i/5) = nextSine: -0.966118
有时是正确的,但有时是错误的,例如当i==303
您可能希望在运行函数之前强制转换为float:
float nextSine = aSin((float)i/5.0);
你在这里有这些问题:
1)你试图将一个整数除以5,如果整数不能被5整除,可能会失去精度。例如,313/5=62,而不是你的62.6,但这只是其中一个例子。解决方法是显式地使用float。
2)您有一个不必要的nextSine变量。你可以在这里简单地消除它。
3)你的代码中有语法错误,因为你说的是**q**Sin,而不是aSin。
4)确保你的内联函数尽可能有效。
5)你试图使用显式空间打印,但qDebug已经为你管理,所以你最终有两个而不是预期的一个。
所以,这是我个人想写的:
for (int i = 0; i < 314; ++i)
qDebug() << "i:" <<QString::number(i)
<< " sin(i/5) = nextSine:" << qSin(static_cast<float>(i)/5);
或
for (int i = 0; i < 314; ++i)
qDebug() << "i:" <<QString::number(i)
<< " sin(i/5.0) = nextSine:" << qSin(i/5.0);
或
for (float f = 0; f < 314.0; f+=1.0)
qDebug() << "i:" <<QString::number(f, 'f')
<< " sin(f/5) = nextSine:" << qSin(f/5);
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- sin cos 函数在大于 90 的度数时给出错误的结果
- qSin()给出错误的sin值
- Sin和cos图表绘图仪…c++的一些算法错误
- ' std::sin '的最后一位是错误的