Jam*_*ens 5 c++ precision double int casting
我正在编写一个需要占据平方根的程序.由于我采用平方根的值是正数,我只是将其转换为int.所以说以下示例:
int i = 16;
int j = std::sqrt(i)
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1837 次 |
| 最近记录: |