Questions tagged «precision»

有关编程中数值精度的问题。对于分类精度,请使用标签[precision-recall]。

3
在R中控制打印输出中的小数位数
R中有一个选项可以控制数字显示。例如: options(digits=10) 应该以10位数字给出计算结果,直到R会话结束。在R的帮助文件中,digits参数的定义如下: digits:控制在打印数字值时要打印的位数。这只是一个建议。有效值为1 ... 22,默认值为7 因此,它说这只是一个建议。如果我希望始终显示10位数字,而不是多多少少怎么办? 我的第二个问题是,如果我想显示22位以上的数字,例如100位数字等更精确的计算,该怎么办?基数R是否有可能,或者我是否需要其他包装/功能? 编辑:感谢jmoy的建议,我尝试了sprintf("%.100f",pi),它给了 [1] "3.1415926535897931159979634685441851615905761718750000000000000000000000000000000000000000000000000000" 其中有48位小数。这是R可以处理的最大限制吗?

11
应该以哪种顺序添加浮点数以获得最精确的结果?
这是我最近的一次采访中问的一个问题,我想知道(我实际上不记得数值分析的理论,所以请帮助我:) 如果我们有一些函数,它会累积浮点数: std::accumulate(v.begin(), v.end(), 0.0); v是一个std::vector<float>,例如。 在累加它们之前对这些数字进行排序会更好吗? 哪个命令会给出最准确的答案? 我怀疑排序依次递增的数字实际上使数值误差少,但不幸的是我不能证明它自己。 PS我确实意识到这可能与现实世界的编程无关,只是感到好奇。

9
检查浮点值是否等于0是否安全?
我知道您通常不能依赖双精度或十进制类型值之间的相等性,但是我想知道0是否是特例。 虽然我可以理解0.00000000000001和0.00000000000002之间的不精确性,但0本身似乎很难弄乱,因为它什么都没有。如果您对某事一无所知,那就再也不是什么了。 但是我对这个话题不太了解,所以我不必说。 double x = 0.0; return (x == 0.0) ? true : false; 那会永远返回真吗?

11
PHP7.1 json_encode()浮动问题
这不是问题,因为更多的是要意识到。我更新了一个使用json_encode()PHP7.1.1的应用程序,然后看到一个问题,即浮点数被更改为有时会扩展到17位数字。根据文档,serialize_precision在对双精度值进行编码时,PHP 7.1.x开始使用而不是精度。我猜这引起了一个示例值 472.185 成为 472.18500000000006 那个价值过去了json_encode()。自发现以来,我已恢复为PHP 7.0.16,不再遇到的问题json_encode()。在还原到PHP 7.0.16之前,我还尝试了更新到PHP 7.1.2。 这个问题背后的原因确实来自PHP-浮点数精度,但是最终的所有原因都是因为从json_encode()。 如果有人知道解决此问题的方法,我将非常乐于聆听推理/修复程序。 多维数组摘录(之前): [staticYaxisInfo] => Array ( [17] => stdClass Object ( [variable_id] => 17 [static] => 1 [min] => 0 [max] => 472.185 [locked_static] => 1 ) ) 经过json_encode()... "staticYaxisInfo": { "17": { "variable_id": "17", "static": "1", "min": 0, "max": …
98 php  json  precision  php-7.1 

7
C#DateTime.Now精度
在执行一些单元测试时,我只是遇到了DateTime.UtcNow一些意外的行为。看来,当您快速连续调用DateTime.Now/UtcNow时,似乎可以在比预期更长的时间间隔内返回相同的值,而不是捕获更精确的毫秒增量。 我知道有一个秒表类更适合进行精确的时间测量,但是我很好奇是否有人可以在DateTime中解释这种行为?是否有记录DateTime.Now的官方精度(例如,精度在50毫秒内?)?为什么将DateTime.Now设置为比大多数CPU时钟所能处理的精度低?也许它是专为最低公分母设计的? public static void Main(string[] args) { var stopwatch = new Stopwatch(); stopwatch.Start(); for (int i=0; i<1000; i++) { var now = DateTime.Now; Console.WriteLine(string.Format( "Ticks: {0}\tMilliseconds: {1}", now.Ticks, now.Millisecond)); } stopwatch.Stop(); Console.WriteLine("Stopwatch.ElapsedMilliseconds: {0}", stopwatch.ElapsedMilliseconds); Console.ReadLine(); }

6
0.0和1.0之间有多少个双数?
这是我多年来一直在想的事情,但是我从来没有花时间问过。 许多(伪)随机数生成器生成0.0到1.0之间的随机数。从数学上讲,此范围内有无限个数,但它double是一个浮点数,因此精度有限。 所以问题是: double0.0和1.0之间有多少个数字? 1和2之间的数字是否一样多?在100和101之间?在10 ^ 100和10 ^ 100 + 1之间? 注意:如果有所作为,我对Java的定义double特别感兴趣。

2
为什么在SQL中为199.96-0 = 200?
我有些客户的账单很奇怪。我能够找出核心问题: SELECT 199.96 - (0.0 * FLOOR(CAST(1.0 AS DECIMAL(19, 4)) * CAST(199.96 AS DECIMAL(19, 4)))) -- 200 what the? SELECT 199.96 - (0.0 * FLOOR(1.0 * CAST(199.96 AS DECIMAL(19, 4)))) -- 199.96 SELECT 199.96 - (0.0 * FLOOR(CAST(1.0 AS DECIMAL(19, 4)) * 199.96)) -- 199.96 SELECT 199.96 - (CAST(0.0 AS …

5
Python中的双精度浮点值?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2个月前关闭。 改善这个问题 是否有比浮点精度更好的数据类型?

7
在16位,32位和64位IEEE-754系统中可以表示什么范围的数字?
我对浮点数的表示方式有些了解,但恐怕还不够。 普遍的问题是: 对于给定的精度(出于我的目的,以10为基数的精确小数位数),对于16位,32位和64位IEEE-754系统,可以表示什么数字范围? 具体来说,我只对精度为+/- 0.5(一个位)或+/- 0.0005(千个位)的16位和32位数字范围感兴趣。

2
在MATLAB中,变量默认是否真的是双精度的?
这个问题是我进一步调查后发现的奇怪问题。 我一直都理解默认情况下MATLAB变量是双精度的。因此,如果我要进行一些操作,例如声明一个小数点后20位数字的变量: >> num = 2.71828182845904553488; >> class(num) % Display the variable type ans = double 我希望最后4位数字被忽略,因为浮点相对精度约为10 -16: >> eps(num) ans = 4.440892098500626e-016 如果我尝试显示小数点后的数字超过16位(使用fprintf或sprintf),那么我会看到: >> fprintf('%0.20f\n', num) 2.71828182845904550000 >> sprintf('%0.20f', num) ans = 2.71828182845904550000 换句话说,数字17到20均为0。 但是当我在Symbolic Toolbox中传递num给变量精度算术函数时,事情变得很奇怪,告诉它使用21位精度表示数字: >> vpa(num, 21) ans = 2.71828182845904553488 什么?!那些后四位数字又出现了!当我输入的原始数字存储为双精度变量时,它们不应该丢失num吗?由于num传递给时是一个双精度变量vpa,如何vpa知道它们是什么? 我对发生的事情的最佳猜测是,MATLAB内部表示的num精度比双精度要高,因为我将其初始化为比双精度变量可以处理的小数点后数字还多的数字。这真的是发生了什么,还是发生了其他事情? 奖励:如果您还没有上述偏头痛的话,这是另外一个困惑的来源... >> num = 2.71828182845904553488; …

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) …

7
调整十进制精度.net
这些在C#中的行 decimal a = 2m; decimal b = 2.0m; decimal c = 2.00000000m; decimal d = 2.000000000000000000000000000m; Console.WriteLine(a); Console.WriteLine(b); Console.WriteLine(c); Console.WriteLine(d); 生成此输出: 2 2.0 2.00000000 2.000000000000000000000000000 因此,我可以看到从文字中创建一个十进制变量可以控制精度。 是否可以在不使用文字的情况下调整小数变量的精度? 如何从a创建b?如何从c创建b?

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用于调整由于精度问题引起的差异的准则?

1
为什么np.dot不精确?(n维数组)
假设我们采用np.dot两个'float32'2D数组: res = np.dot(a, b) # see CASE 1 print(list(res[0])) # list shows more digits [-0.90448684, -1.1708503, 0.907136, 3.5594249, 1.1374011, -1.3826287] 数字。除了它们可以更改: 案例1:切片a np.random.seed(1) a = np.random.randn(9, 6).astype('float32') b = np.random.randn(6, 6).astype('float32') for i in range(1, len(a)): print(list(np.dot(a[:i], b)[0])) # full shape: (i, 6) [-0.9044868, -1.1708502, 0.90713596, 3.5594249, 1.1374012, -1.3826287] …
15 python  c  arrays  numpy  precision 

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