我想先用蛮力解决 Project Euler 94。 这需要我计算出给定三角形的面积是否是整数。 我确实知道底和高,它们都是不可或缺的。
long double area = 0.5*h*b;
当使用double
点运算时,我得到的答案超出了指数并牺牲了分数的精度。
我有什么办法可以忽略指数的最重要部分而只关注分数,因为我只对面积是否完整而不是它的大小感兴趣。我还使用 Visual Studio,我认为它没有 long double
只是 double
?
编辑
现在这是我的代码。它将拾取错误三角形的数量从 26 个减少到 23 个。
编辑 2
我已经阅读了每个人的建议,但我仍然无法过滤掉不完整的高度我最新的代码如下所示。我知道我正在做一些非常愚蠢的事情,但就是无法指出它。
void findAET(){
int gt = 0; //triangle count is
for(long long ss = 3; ss<333333334;ss+=2){ //skips out odd bases
for(int c = -1; c<2; c+=2){
long long base = c + ss;
if((sqrt((ss*ss)-(double)((base/2)*(base/2)))) == int(sqrt(((ss*ss))-(double)((base/2)*(base/2)))) ){ // check if height is an integer
if( (int)((sqrt((ss*ss)-(double)((base/2)*(base/2))))*base)%2==0){
cout<<" same sides "<<ss<<" base "<< base <<endl;
gt++;
}
}
}
}
}
}
最佳答案
评论中提到,如果h
和b
都是整数类型,那么0.5*h*b
是整数h
或 b
为偶数时的结果:
if (((h % 2) == 0) || ((b % 2) == 0)) {
printf("area is integral\n");
} else {
printf("area is not integral\n");
}
关于c++ - 试图避免在双点运算中舍入,无法超过双,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33394143/