标签: floating-accuracy

printf()中的浮点格式

我有花车的数组,其中数据存储与不同的小数点所以有的123.40000,123.45000,123.45600...现在如果我要在打印字符串中的这些值,而不到底0 printf(),让自己123.4,123.45,123.456,没有那些0到底.这可能吗?如果是这样,怎么样?

c floating-point floating-accuracy

8
推荐指数
1
解决办法
5万
查看次数

Ruby浮点精度

据我了解,Ruby(1.9.2)浮点数的精度为15位十进制数.因此,我希望舍入浮点x到15位小数将等于x.对于这种计算,情况并非如此.

x = (0.33 * 10)
x == x.round(15) # => false
Run Code Online (Sandbox Code Playgroud)

顺便说一句,舍入到16位返回true.

你能解释一下吗?

ruby floating-point floating-accuracy

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

浮点除法 - 偏向于避免结果小于"精确"值

我目前正在收紧浮点数值以估算一个值.(p(k,t)对于那些感兴趣的人来说.)从本质上讲,效用永远不会低估这个值:可能的素数生成的安全性取决于数字上强大的实现.虽然输出结果与公布的值一致,但我使用该DBL_EPSILON值来确保除法产生的结果永远不会小于真值:

考虑: double x, y; /* assigned some values... */

评估:r = x / y;频繁发生,但这些(有限精度)结果可能会截断真实结果中的有效数字 - 可能是无限精确的合理扩展.我目前试图通过对分子应用偏差来缓解这种情况,即

r = ((1.0 + DBL_EPSILON) * x) / y;
Run Code Online (Sandbox Code Playgroud)

如果你对这个问题一无所知,p(k,t)通常比大多数估计要小得多 - 但是用这个"观察"来解决问题根本不够好.我当然可以说:

(((1.0 + DBL_EPSILON) * x) / y) >= (x / y)
Run Code Online (Sandbox Code Playgroud)

当然,我需要确保'偏差'结果大于或等于'确切'值.虽然我确信它与操纵或缩放有关DBL_EPSILON,但我显然希望"偏差"结果超出"精确"结果的最小值 - 可以在IEEE-754算术假设下证明.

是的,我看过Goldberg的论文,并且我一直在寻找一个强大的解决方案.请不要建议操纵舍入模式.理想情况下,我是一个非常了解浮点定理的人的回答,或者知道一个非常好的例子.


编辑:澄清(((1.0 + DBL_EPSILON) * x) / y)或表格(((1.0 + c) * x) / y)不是先决条件.这只是我使用的方法"可能足够好",没有为它提供坚实的基础.我可以说分子和分母不是特殊值:NaNs,Infs等,分母也不是零.

c floating-point floating-accuracy ieee-754

8
推荐指数
1
解决办法
814
查看次数

是否有可能强制浮点数的指数或有效数与另一个浮点数(Python)相匹配?

这是一个有趣的问题,我试图在前几天工作.是否有可能强制一个的有效数或指数与Python中的float另一个相同float

问题出现了,因为我试图重新缩放某些数据,以便min和max匹配另一个数据集.但是,我重新调整后的数据略有偏差(大约小数点后6位),这足以引起问题.

提出一个想法,我有f1f2(type(f1) == type(f2) == numpy.ndarray).我想要np.max(f1) == np.max(f2) and np.min(f1) == np.min(f2).为此,我做到了:

import numpy as np

f2 = (f2-np.min(f2))/(np.max(f2)-np.min(f2)) # f2 is now between 0.0 and 1.0
f2 = f2*(np.max(f1)-np.min(f1)) + np.min(f1)  # f2 is now between min(f1) and max(f1)
Run Code Online (Sandbox Code Playgroud)

结果(仅作为示例)将是:

np.max(f1) # 5.0230593
np.max(f2) # 5.0230602 but I need 5.0230593 
Run Code Online (Sandbox Code Playgroud)

我最初的想法是,强制指数float将是正确的解决方案.我找不到多少,所以我为我的需要做了一个解决方法:

exp = 0
mm = np.max(f1)

# find where the decimal …
Run Code Online (Sandbox Code Playgroud)

python floating-point numpy floating-accuracy

8
推荐指数
2
解决办法
646
查看次数

我可以将pandas.dataframe.isin()与数字容差参数一起使用吗?

我事先审查了以下帖子.有没有办法使用具有近似因子或容差值的DataFrame.isin()?还是有其他方法可以吗?

如果列中的值位于设置的值列表中,则过滤数据帧行

使用值列表从pandas数据帧中选择行

EX)

df = DataFrame({'A' : [5,6,3.3,4], 'B' : [1,2,3.2, 5]})

In : df
Out:
   A    B
0  5    1
1  6    2
2  3.3  3.2
3  4    5  

df[df['A'].isin([3, 6], tol=.5)]

In : df
Out:
   A    B
1  6    2
2  3.3  3.2
Run Code Online (Sandbox Code Playgroud)

python comparison floating-accuracy comparison-operators pandas

8
推荐指数
1
解决办法
2237
查看次数

C++ float vs double cout setprecision oddities(newbie)

任何人都可以解释为什么当我使用setprecision()时,这两个相同值的变量可以输出不同的值?

#include <iostream>
#include <iomanip>
int main()
{
    float a=98.765;
    double b = 98.765;
    //std::cout<<std::setprecision(2)<<a<<std::endl;
    std::cout<<std::fixed;
    std::cout<<std::setprecision(2)<<a<<std::endl;
    std::cout<<std::setprecision(2)<<b<<std::endl;
}
Run Code Online (Sandbox Code Playgroud)

a的输出为98.76,而b的输出为98.77.

c++ math precision floating-accuracy

8
推荐指数
1
解决办法
321
查看次数

C++浮点精度

可能重复:
浮点不准确示例

double a = 0.3;
std::cout.precision(20);
std::cout << a << std::endl;
Run Code Online (Sandbox Code Playgroud)

结果:0.2999999999999999889

double a, b;
a = 0.3;
b = 0;
for (char i = 1; i <= 50; i++) {
  b = b + a;
};
std::cout.precision(20);
std::cout << b << std::endl;
Run Code Online (Sandbox Code Playgroud)

结果:15.000000000000014211

所以..'a'比它应该小.但是,如果我们采取'a'50次 - 结果会比它应该更大.

为什么是这样?如何在这种情况下得到正确的结果?

c c++ floating-point precision floating-accuracy

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

零防止除法:检查除数的表达式不会导致零与检查除数不为零?

由于减法中的浮点误差,在以下情况下是否可以除零?

float x, y, z;
...
if (y != 1.0)
    z = x / (y - 1.0);
Run Code Online (Sandbox Code Playgroud)

换句话说,以下是否更安全?

float divisor = y - 1.0;
if (divisor != 0.0)
    z = x / divisor;
Run Code Online (Sandbox Code Playgroud)

c++ floating-point floating-accuracy divide-by-zero floating-point-precision

7
推荐指数
2
解决办法
3262
查看次数

为什么0.1 + 0.4 = 0.5?

我们知道浮点数被打破了,因为十进制数不能总是用二进制来完美表示.它们四舍五入到可以用二进制表示的数字; 有时这个数字更高,有时它更低.在这种情况下,使用无处不在的IEEE 754双格式,高0.1和0.4:

0.1 = 0.1000000000000000055511151231257827021181583404541015625
0.4 = 0.40000000000000002220446049250313080847263336181640625
Run Code Online (Sandbox Code Playgroud)

由于这两个数字都很高,你可以期望它们的总和也很高.完美的添加应该会给你0.5000000000000000277555756156289135105907917022705078125,但你会得到一个很好的确切0.5.为什么?


问题浮点数学是否破碎?已经在上面确定了,但这个问题是不同的.在考虑该问题的答案时,它要求对非直观结果进一步详细说明.

language-agnostic math floating-point floating-accuracy

7
推荐指数
2
解决办法
261
查看次数

点-多边形滑动碰撞检测中如何防止浮点误差

我正在尝试编写一个函数来处理我正在编程的游戏中的运动。我几乎拥有的作品,但是在某些情况下它崩溃了。

我已经编写了一个最小的说明性示例,如下所示。在此示例中,我试图计算由点表示的对象的移动和运动矢量。根据一组多边形检查该对象的移动路径,这些多边形被细分为线段以进行测试。当此对象与线段碰撞时,我希望它沿该线段滑动(而不是停下来或反弹)。

为此,我沿着预期的碰撞路径进行检查,如果找到了相交点,则沿着相交的线段的路径从该相交点进行新的测试,并计算其余运动的幅度。

在此处输入图片说明

当我们沿着线段滑入“口袋”时,就会出现问题。通常,碰撞检查会通过形成凹穴的两个线段,并且物体会滑过。因为我平行于一个线段行进,并且在端点处与两个线段相交,所以我认为此问题是由浮点错误引起的。它是否通过,被捕获或被捕获一次,然后在第二次检查中通过都似乎完全是随机的。

我正在使用在这里找到的简单算法来计算交集:https : //stackoverflow.com/a/20679579/4208739,但是我也尝试了许多其他算法。都表现出相同的问题。

(Vector2是Unity库提供的类,它仅将x和y坐标保存为浮点数。Vector2.Dot函数仅计算点积)。

//returns the final destination of the intended movement, given the starting position, intended direction of movement, and provided collection of line segments
//slideMax provides a hard cap on number of slides allowed before we give up
Vector2 Move(Vector2 pos, Vector2[] lineStarts, Vector2[] lineEnds, Vector2 moveDir, int slideMax)
{
    int slideCount = 0;
    while (moveDir != Vector2.zero && slideCount < slideMax)
    {
        pos = DynamicMove(pos, lineStarts, lineEnds, moveDir, out moveDir);
        slideCount++; …
Run Code Online (Sandbox Code Playgroud)

c# collision-detection floating-accuracy game-physics

7
推荐指数
1
解决办法
172
查看次数