标签: floating-accuracy

PI和浮点数的准确性

Pi的单/双/扩展精度浮点表示精确到小数位数?

floating-point precision floating-accuracy

11
推荐指数
3
解决办法
3万
查看次数

浮点比较不可再现性

我和我的博士 学生在物理数据分析环境中遇到了一个问题,我可以使用一些洞察力.我们的代码可以分析来自LHC实验之一的数据,从而产生不可重复的结果.特别地,在相同机器上运行的相同二进制获得的计算结果可以在连续执行之间不同.我们知道许多不同的不可再生性来源,但已排除了通常的嫌疑人.

在比较名义上具有相同值的两个数字时,我们已经将问题跟踪到(双精度)浮点比较运算的不可再现性.由于分析中的先前步骤,偶尔会发生这种情况.我们刚刚找到一个示例来测试一个数字是否小于0.3(请注意,我们永远不会测试浮点值之间的相等性).事实证明,由于探测器的几何形状,计算有可能偶尔产生精确到0.3(或其最接近的双精度表示)的结果.

我们非常清楚比较浮点数以及FPU中过度精度可能影响比较结果的缺陷.我想回答的问题是"为什么结果不可复制?" 是因为FPU寄存器加载或其他FPU指令没有清除多余的位,因此先前计算中的"剩余"位会影响结果吗?(这似乎不太可能)我在另一个论坛上看到一个建议,即进程或线程之间的上下文切换也可能导致浮点比较结果的变化,因为FPU的内容存储在堆栈中,因此被截断.任何关于这些=或其他可能的解释的评论将不胜感激.

c++ floating-accuracy

11
推荐指数
2
解决办法
651
查看次数

如何正确划分微小的双精度数而不出现精度误差?

我正在尝试诊断并修复一个可归结为X/Y的错误,当X和Y很小时会产生不稳定的结果:

在此输入图像描述

在这种情况下,cx和patharea都会顺利增加.它们的比例在高数字时是平滑的渐近线,但对于"小"数字则不稳定.显而易见的第一个想法是我们达到浮点精度的极限,但实际数字本身远不及它.ActionScript"Number"类型是IEE 754双精度浮点数,因此应该有15个十进制数字的精度(如果我读得正确).

分母(patharea)的一些典型值:

0.0000000002119123
0.0000000002137313
0.0000000002137313
0.0000000002155502
0.0000000002182787
0.0000000002200977
0.0000000002210072
Run Code Online (Sandbox Code Playgroud)

分子(cx):

0.0000000922932995
0.0000000930474444
0.0000000930582124
0.0000000938123574
0.0000000950458711
0.0000000958000159
0.0000000962901528
0.0000000970442977
0.0000000977984426
Run Code Online (Sandbox Code Playgroud)

这些中的每一个都单调增加,但如上所述,这个比例是混乱的.

在更大的数字,它平稳到平滑的双曲线.

所以,我的问题是:当你需要分开时,处理非常小数字的正确方法是什么?

我想提前将分子和/或分母乘以1000,但是不能完全解决.

有问题的实际代码是这里recalculate()功能.它计算多边形的质心,但是当多边形很小时,质心在该位置周围不规则地跳跃,并且可能与多边形相距很远.上面的数据系列是以一致的方向移动多边形的一个节点的结果(手动,这就是为什么它不是非常平滑).

这是Adobe Flex 4.5.

floating-point double division floating-accuracy actionscript-3

11
推荐指数
1
解决办法
1237
查看次数

c ++:浮点运算稳定性策略

任何人都可以推荐任何包含维护各种浮点运算稳定性的策略的C++库/例程/包吗?

示例:假设您希望long double在单位间隔(0,1)中对一百万个向量/数组求和,并且每个数字的大小大致相同.天真的求和for (int i=0;i<1000000;++i) sum += array[i]; 是不可靠的 - 足够大i,sum将会比一个更大的数量级array[i],因此sum += array[i]相当于sum += 0.00.(注意:此示例的解决方案是二进制求和策略.)

我处理数千/数百万微小概率的总和和产品.我使用MPFRC++具有2048位有效数的任意精度库,但仍然适用相同的问题.

我主要关心的是:

  1. 准确汇总许多数字的策略(例如上面的例子).
  2. 乘法和除法何时可能不稳定?(如果我想规范化大量数字,我的归一化常数应该是多少?最小值?最大?中位数?)

c++ math floating-accuracy stability numerical-stability

11
推荐指数
1
解决办法
1922
查看次数

在pandas中使用read_csv时精度会丢失

我在文本文件中有以下格式的文件,我试图读入一个pandas数据帧.

895|2015-4-23|19|10000|LA|0.4677978806|0.4773469340|0.4089938425|0.8224291972|0.8652525793|0.6829942860|0.5139162227|
Run Code Online (Sandbox Code Playgroud)

如您所见,输入文件中的浮点后有10个整数.

df = pd.read_csv('mockup.txt',header=None,delimiter='|')
Run Code Online (Sandbox Code Playgroud)

当我尝试将其读入数据帧时,我没有得到最后4个整数

df[5].head()

0    0.467798
1    0.258165
2    0.860384
3    0.803388
4    0.249820
Name: 5, dtype: float64
Run Code Online (Sandbox Code Playgroud)

如何获得输入文件中的完整精度?我有一些需要执行的矩阵操作,所以我不能把它作为字符串.

我发现我必须做些什么,dtype但我不知道应该在哪里使用它.

python csv numpy floating-accuracy pandas

11
推荐指数
1
解决办法
9504
查看次数

如何以完美的准确度将字符串转换为浮点数?

我正在尝试用D编程语言编写一个函数来替换对C的strtold的调用.(基本原理:要使用来自D的strtold,你必须将D字符串转换为C字符串,这是低效的.另外,strtold不能在编译时执行.)我想出了一个主要有效的实现,但是我似乎在最不重要的位上失去了一些精确度.

算法的有趣部分的代码如下,我可以看到精度损失来自哪里,但我不知道如何摆脱它.(我遗漏了许多与核心算法无关的代码部分,以节省人们的阅读.)什么字符串到浮点算法将保证结果尽可能接近IEEE编号line到字符串表示的值.

real currentPlace = 10.0L ^^ (pointPos - ePos + 1 + expon);

real ans = 0;
for(int index = ePos - 1; index > -1; index--) {
    if(str[index] == '.') {
        continue;
    }

    if(str[index] < '0' || str[index] > '9') {
        err();
    }

    auto digit = cast(int) str[index] - cast(int) '0';
    ans += digit * currentPlace;
    currentPlace *= 10;
}

return ans * sign;
Run Code Online (Sandbox Code Playgroud)

此外,我正在使用旧版本的单元测试,其中包括:

assert(to!(real)("0.456") == 0.456L);
Run Code Online (Sandbox Code Playgroud)

我的函数生成的答案是否有可能比解析浮点文字时编译器生成的表示更准确,但编译器(用C++编写)总是与strtold完全一致,因为它在内部使用strtold进行解析浮点文字?

floating-point d floating-accuracy

10
推荐指数
2
解决办法
4019
查看次数

10
推荐指数
2
解决办法
2859
查看次数

在java中操作和比较浮点

在Java中,没有精确表示浮点运算.例如这个java代码:

float a = 1.2; 
float b= 3.0;
float c = a * b; 
if(c == 3.6){
    System.out.println("c is 3.6");
} 
else {
    System.out.println("c is not 3.6");
} 
Run Code Online (Sandbox Code Playgroud)

打印"c不是3.6".

我对超过3位小数的精度感兴趣(#.###).我如何处理这个问题来乘以浮点数并可靠地比较它们?

java floating-point floating-accuracy

10
推荐指数
3
解决办法
3万
查看次数

python浮点数

我有点困惑为什么python在这种情况下添加一些额外的十进制数,请帮忙解释一下

>>> mylist = ["list item 1", 2, 3.14]
>>> print mylist ['list item 1', 2, 3.1400000000000001]
Run Code Online (Sandbox Code Playgroud)

python floating-point numerical floating-accuracy

10
推荐指数
2
解决办法
9206
查看次数

C#错误减法?12.345 - 12 = 0.345000000000001

我是C#的初学者,我正在使用浮点数.我需要在这两个数字之间进行减法,但它不起作用.我知道这是由浮点数引起的,但我该如何解决呢?如果你这么好,你可以解释一下为什么会发生这种情况吗?提前致谢.

c# floating-point numbers floating-accuracy subtraction

10
推荐指数
3
解决办法
1万
查看次数