c++ - 试图避免在双点运算中舍入,无法超过双

标签 c++ double

我想先用蛮力解决 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++;

                    }
                }
            }
        }
    }
}

最佳答案

评论中提到,如果hb都是整数类型,那么0.5*h*b是整数hb 为偶数时的结果:

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/

相关文章:

c# - 将 float 转换为 double

java - 如何正确地将 double 从服务发送到 Activity

c - 阅读双倍时的 scanf 问题

java - 基本Java : Method to tell if a double is an integer

c++ - 为什么我不能添加指针?

c++ - 减少内存使用

c++ - EXC_BREAKPOINT 崩溃的原因

c++ - 如何在 cpp 宏中生成换行符?

c++ - 如何从 C++ 中的文本文件中删除一行?

ios - 如何在 swift 中对 CoreData 的双属性求和