如何在没有数学库的情况下检查C ++中的变量是否完整

时间:2012-09-13 03:28:09

标签: c++ math

我正在为初学者C ++类编写一个小程序,我应该从用户那里获取一个输入(我正在使用double,因为我喜欢让自己更难)并输出它是否为素数或者复合,如果它是复合的,我需要输出至少一个数字,该数字可被整除。

我手上有太多时间,所以我会稍微努力让它变得更难。我试图做任何事情,除了iostream之外什么都不用。我已经掌握了大部分内容,但这一点让我感到困惑:如何在不使用数学库的情况下确定double是否为整数?(我在这里找到了使用math.h的好解决方案的问题,但没有它没有它)我想有一种方法可以做到这一点,而不需要为看似简单的东西编写50行代码......

2 个答案:

答案 0 :(得分:2)

你可能不应该在浮点数上进行任何计算,但是测试一个数字是否有小数的简单方法是发言并将其与原始数据进行比较。在C ++中,您可以通过转换为int(假设只有正数),然后转换回double来发言:

bool isWhole( double d ) {
   int whole = d;               // will round down to the nearest integer
   return (d-whole < epsilon);  // for a small enough epsilon
}

答案 1 :(得分:2)

您可以将double值转换为适当大的整数类型,然后查看这两个值是否相同:

double d = /* whatever */
long long ival = d;
if (ival == d) {
    /* d holds integral value. */
}