- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我的问题是我必须使用第三方函数/算法,它采用 double 数组作为输入,但显然对输入数据中的非常小的变化很敏感.但是对于我的应用程序,我必须为(几乎)相同的输入获得相同的结果!特别是我有两个测试输入数组,它们直到小数点后的第 5 个位置都是相同的,但我仍然得到不同的结果。所以导致“问题”的原因一定是在小数点后第 5 位之后。
现在我的想法是将输入四舍五入到略低的精度,以便从非常相似但不是 100% 相同的输入中获得相同的结果。因此,我正在寻找一种好的/有效的方法来将双精度值四舍五入到稍微较低的精度。到目前为止,我使用这段代码舍入到小数点后的第 9 位:
double x = original_input();
x = double(qRound(x * 1000000000.0)) / 1000000000.0;
这里的 qRound() 是 Qt 中的普通 double 到整数舍入函数。这段代码有效,它确实解决了我的两个“有问题的”测试集的问题。但是:是否有更有效的方法?
另外让我困扰的是:对于在 -100.0 到 100.0 范围内的输入数据(我当前的输入数据就是这种情况),四舍五入到小数点后第 9 位可能是合理的。但是,例如,对于 -0.001 到 0.001 范围内的输入数据,它可能太多(即精度损失太多)。不幸的是,我不知道在其他情况下我的输入值会在什么范围内......
毕竟,我认为我需要的是类似执行以下操作的函数:通过适当舍入,将给定的 double 精度值 X 截断到最多 L-N小数点后的位置,其中 L 是 double-precision 可以存储(表示)给定值的小数点后的位数; N 是固定的,例如 3。这意味着对于“小”值,我们允许小数点后的位置多于“大”值。换句话说,我想将 64 位浮点值四舍五入为(稍微)更小的精度,如 60 位或 56 位,然后将其存储回 64 位 double 值。
这对你来说有意义吗?如果是这样,您能否建议一种在 C++ 中(有效地)执行此操作的方法???
提前致谢!
最佳答案
如果你看一下 double bit layout ,您可以看到如何将它与一些按位魔术相结合,以实现任意精度的快速(二进制)舍入。您具有以下位布局:
SEEEEEEEEEEEFFFFFFFFFFF.......FFFFFFFFFF
其中 S
是符号位,E
是指数位,F
是小数位。你可以像这样制作位掩码:
11111111111111111111111.......1111000000
和按位与(&
) 两者结合在一起。结果是原始输入的舍入版本:
SEEEEEEEEEEEFFFFFFFFFFF.......FFFF000000
并且您可以通过更改尾随零的数量来控制截断多少数据。更多零 = 更多舍入;更少 = 更少。您还可以获得您想要的其他效果:小输入值受到的影响比例小于大输入值,因为每个位对应的“位置”由指数决定。
希望对您有所帮助!
警告:这在技术上是截断而不是真正的舍入(所有值将变得更接近零,无论它们与另一个可能的结果有多接近),但是希望它对您的情况同样有用。
关于c++ - 将 double 值舍入为(稍微)较低精度的好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14150136/
面对这样的事实,MatPlotlib 在使用 self.frame.canvas.draw() 时,我在一个简单的图表上仅获得了 12 FPS。我发现一篇关于加速MatPlotlib的好文章:http
我的问题是我的 GameScene 以大约两倍的节点开始,并在几秒钟内绘制计数和 40 fps。这个问题仅出现在我的 iPad(迷你视网膜)上,而在我的 iPhone(5)上,游戏从一开始就运行得很顺
好吧,我开始理解 Android Fragments,但这仍然让我感到困惑。我需要一点帮助。正如它所说,Android fragment 从 API 级别 11 开始受支持,但您可以为较低级别的 AP
我正在尝试在 iPhone 上进行一些图像处理。我正在使用http://developer.apple.com/library/ios/#qa/qa2010/qa1702.html捕获相机帧。 我的问
如果我没有以某种方式更新屏幕,对 canvas.repaint() 的几次调用似乎会被完全跳过。移动鼠标时,一切都很好。 我的代码如下: package yeet.gfxTut; import jav
我知道 android.utils.Base64 仅在 API level8 上可用,但我也听说过这个 Bouncy CaSTLe Base64(org.bouncycaSTLe.util.encod
也许我的逻辑暂时停止工作了,但我发现这种行为令人困惑。假设我有一个 TreeMap 如下: TreeMap map = new TreeMap(Collections.reverseOrder()
关于我的导航,我遇到的问题是第二层被视频或其他由 javascript 创建的元素覆盖(当您将鼠标悬停在“Hier lebe ich”或“Am Meer”时可见): http://www.ulrich
我最初在使用纹理时遇到了颜色困惑的问题,但我设法修复了它(问题是我没有在需要时禁用纹理)。完成此操作后,颜色发生了变化,但仍然不是我想要的颜色 - 白色而不是纯蓝色 (0,0,255) RGB。完整的
在我的游戏中,我在 render 中创建了许多循环和方法。我笔记本电脑的 FPS 范围从 56 到 60,没问题。但是,当我在 Galaxy Note 4 的 Android 操作系统中运行它时,FP
所以我今天一直在试验 z-index,我真的不明白这里发生了什么。 这是一个非常简化的 HTML 版本: // content has z-index of 30, pos abs // c
我用 2 个线程编写了小 WPF 应用程序 - 主线程是 GUI 线程,另一个线程是工作线程。 应用程序有一个带有一些控件的 WPF 表单。有一个按钮,允许选择目录。选择目录后,应用程序会扫描该目录中
我正在努力寻找适合我的数据集的学习算法。 我正在处理一个典型的回归问题。数据集中有 6 个我关心的特征。我的数据集中大约有 800 个数据点。这些特征和预测值具有很高的非线性相关性,因此这些特征并非无
这个问题在这里已经有了答案: Are Activity/Fragment Transitions compatible with pre-Lollipop devices? (4 个回答) 关闭 7
我正在尝试创建一个具有云形成的 AWS S3 存储桶。 S3 存储桶名称需要小写,但我想使用参数来组合该名称。该参数为大写。 我找到了一条路。 我读过这篇文章。 https://github.com/
这太奇怪了,尽管复制粘贴了代码,但我什至无法在 jsfiddle 中复制错误。 基本上我是这样的: 使用这个 CSS: .container { background: t
我是一名优秀的程序员,十分优秀!