Questions tagged «floating-point»

浮点数是实数的近似值,可以表示比整数大的范围,但使用相同的内存量,但代价是精度较低。如果您的问题是关于较小的算术错误(例如,为什么0.2 + 0.1等于0.300000001?)或十进制转换错误,请在发布前阅读下面链接的“信息”页面。

6
为什么在MATLAB中24.0000不等于24.0000?
我正在编写一个程序,需要删除存储在矩阵中的重复点。问题是,当检查这些点是否在矩阵中时,MATLAB无法识别它们是否存在(尽管它们存在)。 在以下代码中,intersections函数获取交点: [points(:,1), points(:,2)] = intersections(... obj.modifiedVGVertices(1,:), obj.modifiedVGVertices(2,:), ... [vertex1(1) vertex2(1)], [vertex1(2) vertex2(2)]); 结果: >> points points = 12.0000 15.0000 33.0000 24.0000 33.0000 24.0000 >> vertex1 vertex1 = 12 15 >> vertex2 vertex2 = 33 24 结果中应消除两个点(vertex1和vertex2)。应该通过以下命令完成: points = points((points(:,1) ~= vertex1(1)) | (points(:,2) ~= vertex1(2)), :); points = points((points(:,1) …

2
检查差异是否小于机器精度的正确/标准方法是什么?
我经常遇到必须检查所获得的差异是否超出机器精度的情况。为此,R似乎有一个方便的变量:.Machine$double.eps。但是,当我转向R源代码获取有关使用此值的准则时,会看到多种不同的模式。 例子 以下是stats库中的一些示例: 检验 if(stderr < 10 *.Machine$double.eps * abs(mx)) chisq.test if(abs(sum(p)-1) > sqrt(.Machine$double.eps)) 整合 rel.tol < max(50*.Machine$double.eps, 0.5e-28) 影响力 e[abs(e) < 100 * .Machine$double.eps * median(abs(e))] <- 0 PRINCOMR if (any(ev[neg] < - 9 * .Machine$double.eps * ev[1L])) 等等 问题 一个如何理解这些不同背后的理由10 *,100 *,50 *和sqrt()修饰? 是否有关于.Machine$double.eps用于调整由于精度问题引起的差异的准则?

7
何时使用浮点数与小数
我正在构建此API,并且数据库将存储代表以下之一的值: 百分比 平均 率 老实说,我不知道如何表示范围介于0到100%之间的数字。应该是 0.00-1.00 0.00-100.00 我不知道的任何其他选择 有一个明确的选择吗?一种在数据库上表示从0%到100%的东西的全局方式?更进一步,它的正确类型是float还是小数? 谢谢。

1
Haskell中(^)的怪异行为
为什么GHCi在下面给出错误的答案? GHCi λ> ((-20.24373193905347)^12)^2 - ((-20.24373193905347)^24) 4.503599627370496e15 Python3 >>> ((-20.24373193905347)**12)**2 - ((-20.24373193905347)**24) 0.0 更新 我将实现Haskell的(^)函数,如下所示。 powerXY :: Double -> Int -> Double powerXY x 0 = 1 powerXY x y | y < 0 = powerXY (1/x) (-y) | otherwise = let z = powerXY x (y `div` 2) in …

5
有序数的有效稳定和
我有很长的浮点正数列表(std::vector<float>,大小〜1000)。数字以降序排序。如果我按照以下顺序对它们求和: for (auto v : vec) { sum += v; } 我猜我可能会遇到一些数值稳定性问题,因为接近向量的结尾sum将比更大v。最简单的解决方案是以相反的顺序遍历向量。我的问题是:既有效率又有前瞻性吗?我会丢失更多的缓存吗? 还有其他智能解决方案吗?

2
调用伪析构函数以获取浮点常量的有效语法
考虑下面的演示程序。 #include <iostream> int main() { typedef float T; 0.f.T::~T(); } 该程序由编译Microsoft Visual Studio Community 2019。 但是clang并gcc发出这样的错误 prog.cc:7:5: error: unable to find numeric literal operator 'operator""f.T' 7 | 0.f.T::~T(); | ^~~~~ 如果要像这样写表达式,( 0.f ).T::~T()则所有三个编译器都将编译该程序。 因此出现一个问题:此记录在0.f.T::~T()语法上是否有效?如果没有,那么什么语法规则就被打破了?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.