标签: floating-accuracy

Python float - str - float怪异

>>> float(str(0.65000000000000002))

0.65000000000000002

>>> float(str(0.47000000000000003))

0.46999999999999997     ???
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?如何转换0.47000000000000003为字符串并将结果值恢复为浮点数?

我在Windows上使用Python 2.5.4.

python string floating-point floating-accuracy ieee-754

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

Haskell中的数学背后是1.0999999999999999

可能重复:
Haskell范围和浮点数

为什么haskel中会出现以下输出:

[0.1,0.3..1]
[0.1,0.3,0.5,0.7,0.8999999999999999,1.0999999999999999]
Run Code Online (Sandbox Code Playgroud)
  1. 什么是背后的数学1.0999999999999999(我在64位Linux机器上,如果它有用)?
  2. 为什么它0.8999999999999999显然1.0999999999999999超出范围时不会停止?

floating-point haskell functional-programming floating-accuracy

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

处理mysqli中的十进制数

我必须将一些项目的价格放在mysql表中.在创建我正在使用的表时,DECIMAL(10,2)因为我在逗号后不需要超过2位数(例如:123,45将被接受作为输入,但123,456将被舍入为123,45与PHP).

第一个问题:使用DECIMAL(10,2),如何知道逗号之前可以存储多少个数字?我知道它不是10,因为10只是Mysql在使用这些数字进行数学运算时所使用的精度:那么数字本身的长度是指定的吗?

第二个问题:我使用PHP来舍入用户输入以适应数据类型(逗号后面带有2个数字的浮点数).我该如何使用它mysqli->bind_param来插入这些数据?我应该使用哪些数据类型(来自文档)bind_param(可能:为什么)?

Character   Description
i   corresponding variable has type integer
d   corresponding variable has type double
s   corresponding variable has type string
b   corresponding variable is a blob and will be sent in packets
Run Code Online (Sandbox Code Playgroud)

php floating-point mysqli floating-accuracy floating-point-precision

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

物理引擎:使用双精度还是单精度?

我从零开始制作一个刚体物理引擎(用于教育目的),我想知道我是否应该为它选择单精度或双精度浮点数.

我将使用OpenGL对其进行可视化,并使用glm库来计算引擎内部以及可视化内容.惯例似乎是在任何地方使用浮动OpenGL,glm::vec3并且glm::vec4似乎在float内部使用.我也注意到有glm::dvec3,glm::dvec4但似乎没有人使用它.我该如何决定使用哪个?double似乎有意义,因为它在今天的硬件上具有更高的精度和几乎相同的性能(据我所知),但float 除了一些GLu的功能和一些GLFW 之外,其他一切似乎都在使用.

c++ opengl simulation floating-point floating-accuracy

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

从浮动到双重,从双重到浮动的精确损失?

float fv = orginal_value;  // original_value may be any float value
...
double dv = (double)fv;
...
fv = (float)dv;
Run Code Online (Sandbox Code Playgroud)

应该fv完全等于original_value吗?任何精度都可能丢失?

c c++ floating-accuracy

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

Java和C#中的数学"pow"返回略有不同的结果?

我正在将程序从C#移植到java.我遇到了一个事实

Java的

Math.pow(0.392156862745098,1./3.) = 0.7319587495200227
Run Code Online (Sandbox Code Playgroud)

C#

Math.Pow( 0.392156862745098, 1.0 / 3.0) =0.73195874952002271
Run Code Online (Sandbox Code Playgroud)

最后一位数字导致进一步计算的充分差异.有没有办法模仿c#的战队?

感谢名单

c# java math floating-accuracy

9
推荐指数
4
解决办法
1913
查看次数

Math.Pow取整数值

来自http://msdn.microsoft.com/en-us/library/system.math.pow.aspx

int value = 2;
for (int power = 0; power <= 32; power++)
    Console.WriteLine("{0}^{1} = {2:N0}",
                      value, power, (long) Math.Pow(value, power));
Run Code Online (Sandbox Code Playgroud)

Math.Pow将双精度作为参数,但在这里我们传递的是int.

问题:如果隐式转换为双重发生,是否存在浮点舍入错误的危险?

如果是,最好使用以下内容:

public static int IntPow(int x, uint pow)
{
    int ret = 1;
    while (pow != 0)
    {
        if ((pow & 1) == 1)
            ret *= x;
        x *= x;
        pow >>= 1;
    }
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

c# floating-accuracy pow

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

FP操作在各种x86 CPU上是否完全相同?

不同的x86 CPU(具有内置FPU和合理的最新版本,比如已推出这个千禧年)为其浮点基元产生完全相同的结果,假设在被比较的CPU上有相同的指令,相同的输入和相同的操作参数,例如舍入模式?我对时间上的差异感兴趣,也没有对Pentium FDIV错误感兴趣(因为那个事件很古老而不符合资格).

我猜对于加法,减法,否定和舍入到整数的答案是肯定的,因为它们具有精确的定义,我很难想象实现中的差异是什么(可能是检测溢出时的错误/下溢,但在某些应用程序中这将是一场灾难,所以我想这很久以前就已经被捕获并修复了).

乘法似乎更可能有不同的实现:确定两个DPFPN产品的(比如)最近可表示的双精度浮点数(64位,包括52 + 1尾数),有时需要计算其尾数的乘积(关于104位精度,对于少数LSBits来说,可以说是浪费精力.我想知道这是否尝试过,并且做得正确.或许IEEE-754或某些事实上的标准规定了什么?

师似乎更加微妙.

而且,除了常见的设计之外,我怀疑所有更复杂事物(trig函数,日志......)的实现都可以完全同步,因为可以使用各种数学方法.

我问的是纯粹的nosiness的结合; 愿意改善我的答案 ; 并期望一种方法(某些时候)允许在VM中运行的程序检测假装运行的CPU与真实CPU之间的不匹配.

x86 floating-accuracy

9
推荐指数
1
解决办法
685
查看次数

为什么这两个float64具有不同的值?

考虑这两种情况:

fmt.Println(912 * 0.01)
fmt.Println(float64(912) * 0.01)
Run Code Online (Sandbox Code Playgroud)

(去游乐场链接)

第二个打印9.120000000000001,这实际上很好,我明白为什么会这样.

但是,为什么第一行打印9.12,最后没有... 01?Go是否将两个无类型常量相乘,并在编译时简单地用9.12文字替换它们?

floating-point floating-accuracy go

9
推荐指数
2
解决办法
444
查看次数

"银行家的四舍五入"真的在数值上更稳定吗?

通过银行家的舍入我的意思是

  1. "绕到最近,连接到均匀"

按照IEEE 754的建议:

舍入到最接近的值; 如果数字中间下降,则使用偶数(零)最低有效位舍入到最接近的值.这是二进制浮点的默认值,也是十进制的推荐默认值.

据说该方法优于

  1. "圆到最近,与零相关"

理由是它"在对四舍五入的数字求和时最小化预期误差".显然,这是因为 "它不会受到负面或正偏差的影响,就像在大多数合理分布上从零方法的一半那样".

我不明白为什么会这样.直观地,如果0.0向零舍入,则0.5"应该"从零舍入(如方法2中所示).这样,相同数量的数字将朝向零并且远离零.换句话说,如果浮动数字用1个十进制数字表示,十个数字中的数字0.0,......,0.9五个将向下舍入,五个用方法2进行四舍五入.类似地1.0,... 1.9等等.

当然,浮点数用二进制尾数表示,但我认为上述推理仍然适用.请注意,对于IEEE 754双精度,整数和整数加半精度可以精确表示绝对值到2^52大约,因此这些精确值实际上会显示出来.

那么方法1如何更好?

language-agnostic floating-point rounding floating-accuracy

9
推荐指数
1
解决办法
1561
查看次数