【发布时间】:2015-03-05 20:14:43
【问题描述】:
我目前正在编写一个需要取平方根的程序。由于我取平方根的值是正数,所以我只是将其转换为 int。所以说下面的例子:
int i = 16;
int j = std::sqrt(i)
j 应该是 4。
我想知道,sqrt 是否有可能返回 3.9999999991 而不是 4.000000001 或其他什么,并且 j 的结果是 3?是否有定义浮点行为的规则?如何正确地将其转换为 int?
【问题讨论】:
-
int integer = std::round(floating_point);
-
如果你关心四舍五入有点相关:stackoverflow.com/questions/485525/round-for-float-in-c
-
@DieterLücking 我认为这会四舍五入到最近,而这里想要的结果是从“真正的”平方根向下舍入。例如。 sqrt(16) -> 4, sqrt(15) ->3
-
@DrewDormann 对,这就是我们想要的结果。我已经考虑过使用 +0.5 方法,但它在这里行不通,因为 sqrt(15) = 3.87 + 0.5 = 4.37 会根据需要转换为 4 而不是 3。
标签: c++ casting int double precision