这段代码中的 *1.0 是什么作用?

3

以下是一个检查一个数是否为质数的代码:

bool IsPrime(int num)
{
    if(num<=1)
        return false;
    if(num==2)
        return true;
    if(num%2==0)
        return false;
    int sRoot = sqrt(num*1.0);
    for(int i=3; i<=sRoot; i+=2)
    {
        if(num%i==0)
            return false;

    }
    return true;
}

表达式 "num*1.0" 是将变量num的值转换为浮点数。

如果没有它,您可能会遇到一个模棱两可的重载编译器错误。 - Mysticial
3
实际上,它将“int”转换为“double”。在我看来,这并不是最清晰的方式。只需使用“static_cast<double>”即可。 - GManNickG
@GManNickG - 它将 int 转换为 double。这段代码中没有强制转换。 - Pete Becker
3个回答

6

1.0乘以num可以将其转换为double类型。你也可以使用显式类型转换实现同样的效果。


@KhoderSarm 编译器将结果向下转换为“int”,截断小数部分。 - Sergey Kalinichenko
@KhoderSarm sqrt 接受一个 double 类型的参数并返回一个 double 类型的值。* 1.0 将参数强制转换为 double 类型,这与返回类型无关。由于 sRoot 是 int 类型,因此 sqrt 的返回值将从 double 类型转换为 int 类型。 - user123
@Khoder 浮点数值可以通过截断小数部分隐式转换为整数值。编译器应该对此发出警告。 - IInspectable
@MohammadAliBaydoun - 返回值将被转换。强制转换是您在代码中编写的内容,用于告诉编译器执行转换。 - Pete Becker
@PeteBecker 对,我总是忘记这个区别。 - user123

3

它正在执行num x 1.0,因此如果num为5,则为5 x 1.0 sqrt()方法以double作为其参数,并将采用5.0


3
在表达式 num*1.0 中,num 首先被提升为 double,因此结果是一个 double,然后传递给 double sqrt(double)。否则,您可能需要使用 sqrt(static_cast<double>(num))
通常情况下,您不需要进行强制类型转换,因为从 intdouble隐式转换。请参考这里

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接