[英]C++ - How to correctly cast double to int
我正在编写一个需要占据平方根的程序。 由于我采用平方根的值是正数,我只是将其转换为int。 所以说以下示例:
int i = 16;
int j = std::sqrt(i)
j应为4。
我想知道,是否有可能sqrt返回3.9999999991而不是4.000000001或其他什么,j的结果是3? 是否有定义浮点行为的规则? 我怎样才能正确地将其转换为int?
几乎所有广泛使用的硬件都使用IETF754浮点数,尽管C ++并不需要它。
假设IETF754浮点数和::std::sqrt
直接映射到IETF754浮点平方根运算,可以确保以下内容:
因此,您的示例将正常工作 。
一般来说,你所暗示的问题可能会发生,但要解决它,你必须提出一个更大的问题:在哪种情况下,一个数字接近积分,真的是积分?
这实际上比看起来更难,因为你想要计算平方根的底限,因此简单的舍入对你不起作用。 但是,一旦您自己回答了这个问题,实施解决方案应该相当简单。 例如:
int i = 16;
int j = std::sqrt(i);
if((j + 1) * (j + 1) == i) j += 1;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.