相关疑难解决方法(0)

将浮点数限制为两个小数点

我希望a四舍五入到13.95.

>>> a
13.949999999999999
>>> round(a, 2)
13.949999999999999
Run Code Online (Sandbox Code Playgroud)

round功能不像我预期的那样工作.

python floating-point precision rounding

1527
推荐指数
28
解决办法
287万
查看次数

为什么不使用Double或Float来表示货币?

我总是被告知永远不要代表钱doublefloat类型,这次我向你提出问题:为什么?

我确信有一个很好的理由,我根本不知道它是什么.

floating-point currency

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

EXPECT_EQ与double或float之和的错误

我无法理解为什么测试用例在汇总双数或浮点数时失败.它对整数数据类型非常精细.

// simple_method.h中的方法

double sum ( double a, double b)
{
    double res = a+b;
    return res;
}
Run Code Online (Sandbox Code Playgroud)

//此方法的测试用例

TEST(simpleSum, sumOfFloat)
{
    EXPECT_EQ(4.56, sum(0.56, 4.0));
}
Run Code Online (Sandbox Code Playgroud)

//输出是

Running main() from gtest_main.cc
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from simpleSum
[ RUN      ] simpleSum.sumOfFloat
/home/pcadmin/Desktop/so/so3/simple_method_test.cpp:7: Failure
Value of: sum(0.56, 4.0)
  Actual: 4.56
Expected: 4.56
[  FAILED  ] simpleSum.sumOfFloat (0 ms)
[----------] 1 test from simpleSum (0 ms total)

[----------] Global test …
Run Code Online (Sandbox Code Playgroud)

c++ floating-point unit-testing googletest

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

为什么ghci说1.1 + 1.1 + 1.1> 3.3是真的?

我最近经历了一个Haskell教程,并在交互式ghcishell中尝试一些简单的Haskell表达式时注意到了这种行为:

Prelude> 1.1 + 1.1 == 2.2
True
Prelude> 1.1 + 1.1 + 1.1 == 3.3
False
Prelude> 1.1 + 1.1 + 1.1 > 3.3
True
Prelude> 1.1 + 1.1 + 1.1
3.3000000000000003
Run Code Online (Sandbox Code Playgroud)

有谁知道那是为什么?

haskell floating-accuracy ghci

8
推荐指数
6
解决办法
1246
查看次数

pow()转换为整数,意外结果

pow()在C编程语言中使用整数强制转换函数时遇到了一些问题.我正在使用的编译器是Windows平台的Tiny C编译器(tcc版本0.9.24).执行以下代码时,它会输出意外结果100, 99:

#include <stdio.h>
#include <math.h>

int main(void)
{
    printf("%d, ", (int) pow(10, 2));
    printf("%d", (int) pow(10, 2));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,在这个在线编译器中,输出符合预期:100, 100.我不知道是什么导致了这种行为.有什么想法吗?我编程错误,编译错误?

c floating-point casting tcc pow

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

XSLT 1.0中的Sum diff问题/错误

我有这个XML数据,并尝试使用下面的XSLT片段对它进行总结.

XML

<?xml version="1.0" encoding="utf-8"?>
<values>
    <value>159.14</value>
    <value>-2572.50</value>
    <value>-2572.50</value>
    <value>2572.50</value>
    <value>2572.50</value>
    <value>-159.14</value>
</values>
Run Code Online (Sandbox Code Playgroud)

XSLT

<?xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
    <xsl:value-of select="sum(values/value)"/>
</xsl:template>

</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

在我的世界中,该值应为0但最终为-0.0000000000005684341886080801

在Visual Studio中运行它并亲自查看.为什么?这是怎么回事?

xslt floating-point

4
推荐指数
1
解决办法
3135
查看次数

为什么Lua算术不等于它自己?

可能重复:
浮点/舍入错误的简单示例是什么?

当我执行以下Lua代码时:

a = 5.6
b = 14 * 0.4
c = 11.2 / 2
d = 28 * 0.2
print( a == b )
print( a == c )
print( a == d )
print( b == c )
print( b == d )
print( c == d )
Run Code Online (Sandbox Code Playgroud)

我得到以下结果:

false
true
false
false
true
false
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么14*0.4和28*0.2不等于5.6?

谢谢

floating-point lua point

4
推荐指数
1
解决办法
651
查看次数

Lua未能评估math.abs(29.7 - 30)<= 0.3

今天早上我发现我的Lua脚本上有一个bug,看起来非常奇怪.这种评估如何以这种方式失败?可以在此处测试示例

第一个例子:

if( math.abs(29.7 - 30) <=  0.3 ) then
  result = 1
else
  result = 0
end
print("result = "..result )
-->> result = 0
Run Code Online (Sandbox Code Playgroud)

第二个例子:

if( 0.3 <=  0.3 ) then
   result = 1
else
   result = 0
end
  print("result = "..result )
-->> result = 1
Run Code Online (Sandbox Code Playgroud)

第三个例子

if( math.abs(29.7-30) == 0.3 )then
   print("Lua says: "..math.abs(29.7-30).." == 0.3")
else
   print("Lua says: "..math.abs(29.7-30).." ~= 0.3")
end
-->> Lua says: 0.3 ~= 0.3 WHAT?
Run Code Online (Sandbox Code Playgroud)

我真的很困惑,我想了解这一点,以避免将来出现类似的错误.谢谢

lua

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

NumPy array_equal 函数没有按预期工作

array_equalNumPy. 我确定我遗漏了一个非常简单的细节。

我想要完成的是单元测试。

事实是,我有数组 1:

In[21]: bounds['lowerBound']

Out[21]: array([ 1. ,  1.2,  1.8])
Run Code Online (Sandbox Code Playgroud)

我有数组 2:

In[22]: res['lowerBound']

Out[22]: array([ 1. ,  1.2,  1.8])
Run Code Online (Sandbox Code Playgroud)

以防万一我确实检查了它们的形状:

In[26]: bounds['lowerBound'].shape
Out[26]: (3,)
In[28]: res['lowerBound'].shape
Out[28]: (3,)
Run Code Online (Sandbox Code Playgroud)

还有dtypes:

In[30]: res['lowerBound'].dtype
Out[30]: dtype('float64')
In[31]: bounds['lowerBound'].dtype
Out[31]: dtype('float64')
Run Code Online (Sandbox Code Playgroud)

仍然当我尝试验证它们是否相同时:

In[29]:  np.array_equal(bounds['lowerBound'],res['lowerBound'])
Out[29]: False
Run Code Online (Sandbox Code Playgroud)

怎么可能 ?

提前致谢 !

编辑:用于生成数据的代码是:

bounds={'lowerBound':np.array([1.,1.2,1.8]), 'upperBound':np.array([10.,12.,18.])}
Run Code Online (Sandbox Code Playgroud)

res字典由以下函数生成:

def generateAdjustedBounds(self,universeMktCap,lowerBound,upperBound):
    lb=np.zeros(len(universeMktCap))
    ub=np.zeros(len(universeMktCap))
    lb[0]=lowerBound
    ub[0]=upperBound

    for dat in range(1,len(lb)):
        lb[dat]=lb[dat-1]*universeMktCap[dat]/universeMktCap[dat-1]
        ub[dat]=ub[dat-1]*universeMktCap[dat]/universeMktCap[dat-1]

    Bounds={'lowerBound':np.array(lb),'upperBound':np.array(ub)}

    return Bounds
Run Code Online (Sandbox Code Playgroud)

python arrays numpy

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

浮点数和decimal.Decimal的小数位问题

我似乎在漂浮物上失去了很多精确度.

例如,我需要解决一个矩阵:

4.0x -2.0y 1.0z =11.0
1.0x +5.0y -3.0z =-6.0
2.0x +2.0y +5.0z =7.0
Run Code Online (Sandbox Code Playgroud)

这是我用来从文本文件导入矩阵的代码:

f = open('gauss.dat')
lines =  f.readlines()
f.close()

j=0
for line in lines:
    bits = string.split(line, ',')
    s=[]
    for i in range(len(bits)):
        if (i!= len(bits)-1):
            s.append(float(bits[i]))
            #print s[i]
    b.append(s)
    y.append(float(bits[len(bits)-1]))
Run Code Online (Sandbox Code Playgroud)

我需要使用gauss-seidel解决,所以我需要重新排列x,y和z的方程式:

x=(11+2y-1z)/4
y=(-6-x+3z)/5
z=(7-2x-2y)/7
Run Code Online (Sandbox Code Playgroud)

这是我用来重新排列方程的代码.b是系数矩阵,y是答案向量:

def equations(b,y):
    i=0
    eqn=[]
    row=[]
    while(i<len(b)):
        j=0
        row=[]
        while(j<len(b)):
            if(i==j):
                row.append(y[i]/b[i][i])
            else:
                row.append(-b[i][j]/b[i][i])
            j=j+1
        eqn.append(row)
        i=i+1
    return eqn
Run Code Online (Sandbox Code Playgroud)

然而,我得到的答案并不精确到小数位.

例如,在重新排列上面的第二个等式时,我应该得到:

y=-1.2-.2x+.6z
Run Code Online (Sandbox Code Playgroud)

我得到的是:

y=-1.2-0.20000000000000001x+0.59999999999999998z
Run Code Online (Sandbox Code Playgroud)

这似乎不是一个大问题,但是当你将数字提高到一个非常高的功率时,错误是非常大的.有没有解决的办法?我尝试了这个Decimal课程,但是它在功能方面效果不佳(即Decimal(x)**2 …

python floating-point decimal floating-accuracy

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