我有两个大小接近 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+009而sum_array2 …
我试图检查一个三角形是否是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) 到目前为止,这不是一个问题,但从今天开始我遇到了一个不会一直发生的奇怪问题,但很少,我会说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
在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数据类型如何工作?
我正在开发一种算法,它解决了Ax = b,其中A和b是已知的.
有两种方法可以做到这一点 x = A -1 b或使用Cholesky.我知道矩阵将始终是正方形和正定,尽管det(A)可能为零.在极少数情况下,我可以忽略它.但是从计算的角度和效率来看,创建一个反矩阵效率太低了吗?
我有这个代码:
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)
所以最后似乎比较工作正常,但我做的不好.
为什么地球上的PHP会将结果转换(int) ((0.1+0.7)*10)为7而不是8?我知道结果将是(float) 8什么时候它的(int)结果将是7?为什么会这样?
我之前正在玩/ 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) 我有以下代码:
@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'
任何人都可以解释什么是/建议代码编辑来纠正
我有一个问题,我的二进制搜索算法找到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循环是否存在问题.我认为这将是一个非常直接的二进制搜索算法,稍作修改以适应平方根方面.
在运行我的代码时,我似乎无法让它产生任何输出.我不确定代码或编译器是否存在真正的问题,因为我认为我的算法与我过去的算法非常接近.