java - 为什么整数比较会给出错误的结果?
问题描述
我一直在尝试解决一个需要我编写一个名为mySqrt
form的函数的问题int mySqrt(int x)
。
我应该计算并返回 x 的平方根,其中 x 保证为非负整数。
由于返回类型是整数,因此十进制数字被截断,只返回结果的整数部分。
我尝试实现一个简单的算法,从该算法开始i=0
,然后递增i
直到的值,$i*i<=x$
然后返回i-1
。
public int mySqrt(int x) {
int i=0;
while(i*i<=x){
i++;
}
return (i-1);
}
我知道发生了什么,但我真的不明白为什么。当 i 足够大i^2 >2^31-1
时,while 循环中的比较(i*i<=x)
(x=2147395600
小于2^31-1
)给了我一个真实的结果。为什么会这样?结果,我得到了垃圾结果。i^2<=x
当我尝试评估 ( ) 时,究竟发生了什么i^2
不能再存储在 int 中?
解决方案
推荐阅读
- python - 将 RGB numpy 数组转换为 HSV
- node.js - NodeJS REST API
- javascript - React-Native sectionlist 占位符/文本位置已经上升
- javascript - React 发出警告(没想到服务器 HTML 包含一个在) 使用 React.Suspense 时
- r - R中的K-NN:Summary.factor中的错误(c(1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,:“总和”对因子没有意义
- python - 如果我在字典中有 2 个列表,如何同时附加两个列表?
- bash - 从 DockerFile 运行 .sh 脚本时出错
- sql - 在 SQL/sqlite3 中,每个查询将使用多少个索引?
- javascript - 从javascript中的数组中提取值
- javascript - 离子数据存储等待承诺完成