社区讨论

警示后人(sqrt的精度问题)

B3957[GESP202403 三级] 完全平方数参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mlxrc9au
此快照首次捕获于
2026/02/22 21:02
2 周前
此快照最后确认于
2026/02/24 21:25
2 周前
查看原帖
这道题的判断语句不能写成cpp if(sqrt(a[i]+a[j])*sqrt(a[i]+a[j])==a[i]+a[j])cnt++;这样的形式,因为sqrt()函数返回值是cpp double 类型,而cpp double类型进行计算时很容易产生误差,导致返回值的小数部分干扰计算,因此需要写成cpp int temp=sqrt(a[i]+a[j]); if(temp*temp==a[i]+a[j])cnt++;这样的形式,给sqrt()的返回值截断一下小数部分,这样非完全平方数就无法计算得到原数,完全平方数不会被小数部分干扰,可以通过平方计算得到原数,从而正确AC

回复

1 条回复,欢迎继续交流。

正在加载回复...