相关疑难解决方法(0)

为什么两个浮点型变量具有不同的值

我有两个大小接近 1000 的整数向量,我要做的是检查这两个向量的平方整数之和是否相同。所以我写了以下代码:

std::vector<int> array1;
std::vector<int> array2;
... // initialize array1 and array2, and in the experiment all elements
    // in the two vectors are the same but the sequence of elements may be different.
    // For example: array1={1001, 2002, 3003, ....} 
   //               array2={2002, 3003, 1001, ....}
assert(array1.size() == array2.size());
float sum_array1 = 0;
float sum_array2 = 0;
for(int i=0; i<array1.size(); i++)
       sum_array1 +=array1[i]*array1[i];
for(int i=0; i<array2.size(); i++)
       sum_array2 +=array2[i]*array2[i];
Run Code Online (Sandbox Code Playgroud)

我希望这sum_array1应该等于sum_array2,但实际上在我的应用程序中我发现它们不同sum_array1 = 1.2868639e+009sum_array2 …

c++

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

检查三角形是否是直角三角形

我试图检查一个三角形是否是Java中的直角三角形.这是测试人员类的一部分:

    Triangle a = new Triangle(new Point(2, 2), new Point(6, 2), new Point(2, 6) );
    System.out.println(a.isRight()); //Expects True
Run Code Online (Sandbox Code Playgroud)

我的三角形类的一部分接收值并将它们设置为x1,y2等:

    public Triangle(Point loc1, Point loc2, Point loc3) {
    x1 =  loc1.getX(); y1 =  loc1.getY();
    . . .
Run Code Online (Sandbox Code Playgroud)

前两段代码都是给我的.我要做的最后一段代码是我做的:

    public boolean isRight() {
        if((Math.pow(side1,2)+Math.pow(side2,2)) == Math.pow(side3,2))
            return true;
        if((Math.pow(side2,2)+Math.pow(side1,2)) == Math.pow(side3,2))
            return true;
        if((Math.pow(side3,2)+Math.pow(side2,2)) == Math.pow(side1,2))
            return true;
        else
            return false;
    }
Run Code Online (Sandbox Code Playgroud)

但是,它仍然返回false.我究竟做错了什么?谢谢你!

更新:感谢您的帮助.我似乎犯了一个相当noob-ish的错误.我从来没有想过双打不是很准确的事实(对不起,只是想用简单的方式说出我做了什么).我最后输入了这个:

        if(Math.abs(side1*side1 + side2*side2 - side3*side3) < 0.2)
        return true;
    if(Math.abs(side1*side1 + side3*side3 - side2*side2) < 0.2)
        return true; …
Run Code Online (Sandbox Code Playgroud)

java

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

比较两个相等的CGFloat:s,得到正(YES)结果

到目前为止,这不是一个问题,但从今天开始我遇到了一个不会一直发生的奇怪问题,但很少,我会说50次中有一次,甚至更少.

我正在比较两个CGFloat:s是这样的:

const CGFloat MYFIRSTFLOAT = /* get the first value */
const CGFloat THESECONDFLOAT = /* get the second value */
if (MYFIRSTFLOAT < THESECONDFLOAT) {
// do something
}
else {
// Do something else
}
Run Code Online (Sandbox Code Playgroud)

你可以看到我没有比较使用==或任何东西,因为它们是浮点数...(比如,它应该与比较浮点值的危险程度无关现在应该如此)

而我遇到的问题是我遇到两个值完全匹配的情况,但比较评估为YES.在我的情况下,两个值都是"8926.5" - 这是我从LLDB获得的值.有没有一个很好的解释??? (我认为LLDB对这两个值进行四舍五入,这意味着它们可能真的是其他值 - 但为什么这也会在运行时发生呢?)

这种让我失望的原因我不能只看到问题......好吧,我正在考虑强制浮点数只用于这个比较,这次我可能没问题,但我觉得这个问题最好完全理解:-P

cgfloat ios

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

浮点值比较失败

在C中,如果我们执行以下代码:

float a = 0.7;
if (a < 0.7)
{
    printf("Less");
}
else
{
    printf("no");
}
Run Code Online (Sandbox Code Playgroud)

上面的代码打印"Less".

但是如果我们执行以下代码:

float a = 1.7;
if (a < 1.7)
{
    printf("Less");
}
else
{
    printf("no");
} 
Run Code Online (Sandbox Code Playgroud)

它打印"不".

这是什么原因?float数据类型如何工作?

c c++

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

矩阵求逆或Cholesky?

我正在开发一种算法,它解决了Ax = b,其中Ab是已知的.

有两种方法可以做到这一点 x = A -1 b或使用Cholesky.我知道矩阵将始终是正方形和正定,尽管det(A)可能为零.在极少数情况下,我可以忽略它.但是从计算的角度和效率来看,创建一个反矩阵效率太低了吗?

math matrix matrix-inverse

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

为什么这种零比较不能正常工作?

我有这个代码:

double A = doSomethingWonderful(); // same as doing  A = 0;
if(A == 0)
{
    fprintf(stderr,"A=%llx\n", A);
}
Run Code Online (Sandbox Code Playgroud)

而这个输出:

A=7f35959a51c0
Run Code Online (Sandbox Code Playgroud)

这怎么可能?

我检查了7f35959a51c0的值,看起来像是6.91040329973658785751176861252E-310,它非常小,但不是零.

编辑:

好的我明白那种打印双精度值的方法不起作用.我需要找到一种方法来打印double的字节.

在评论后我修改了我的代码:

    A = doSomethingWonderful();// same as doing  A = 0;
    if(A == 0)
    {
        char bytes[8];
        memcpy(bytes, &A, sizeof(double));
        for(int i = 0; i < 8; i++)
        fprintf(stderr," %x", bytes[i]);
    }
Run Code Online (Sandbox Code Playgroud)

我得到这个输出:

0 0 0 0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)

所以最后似乎比较工作正常,但我做的不好.

c++ double c++11

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

为什么PHP本身会将(int)((0.1 + 0.7)*10)的结果转换为7而不是8?

为什么地球上的PHP会将结果转换(int) ((0.1+0.7)*10)为7而不是8?我知道结果将是(float) 8什么时候它的(int)结果将是7?为什么会这样?

php floating-point rounding

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

为什么即使在满足基本情况后,此递归函数仍会继续

我之前正在玩/ r/dailyprogrammer的简单挑战; 在这种情况下,你很难发现Dottie号码(~0.739085).虽然挑战需要它,但radians我决定暂时保持它的学位.以下是一些快速代码:

from math import cos

def func(n):
    prev = n
    cur = cos(n)

    if cur == prev:
        print 'Dottie number: ' + str(cur)
    else:
        func(cur)
    print 'Previous = ' + str(prev) + '\tCurrent = ' + str(cur)

func(1)
Run Code Online (Sandbox Code Playgroud)

但是我注意到输出中的以下示例:

Previous = 0.739085133215       Current = 0.739085133215
Previous = 0.739085133215       Current = 0.739085133215
Previous = 0.739085133215       Current = 0.739085133215
Previous = 0.739085133215       Current = 0.739085133215
Previous = 0.739085133215       Current = 0.739085133215
Previous = 0.739085133215       Current = …
Run Code Online (Sandbox Code Playgroud)

python recursion

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

如果比较CGFloat值 - Xcode 7给出错误

我有以下代码:

 @property (nonatomic, assign) CGFloat floatValue;
Run Code Online (Sandbox Code Playgroud)

-

 if (floatValue)
 {
    //Do something
 }
Run Code Online (Sandbox Code Playgroud)

自Xcode 7 - 编译器错误发生:

隐式转换将浮点数转换为整数:'CGFloat'变为'bool'

任何人都可以解释什么是/建议代码编辑来纠正

xcode objective-c cgfloat ios xcode7

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

二进制搜索平方根2

我有一个问题,我的二进制搜索算法找到2的平方根似乎是在一个无限循环并永远运行:

num = 2
low = 1
high = num
i = 0
while((i**2) != 2): #was while(low<high): but wasnt working with it either
 i = low + (high - low) / 2;

 sqrt = i * i

 if (sqrt == num):
     print(i)
 elif(sqrt < num):
     low = i
 else:
     high = i
print(sqrt)    

testRoot = 2 ** (.5)
print(testRoot)
Run Code Online (Sandbox Code Playgroud)

我不确定我的while循环是否存在问题.我认为这将是一个非常直接的二进制搜索算法,稍作修改以适应平方根方面.

在运行我的代码时,我似乎无法让它产生任何输出.我不确定代码或编译器是否存在真正的问题,因为我认为我的算法与我过去的算法非常接近.

python binary-search numerical-methods square-root

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