c++ - 数字如 0.999999 四舍五入为 1

标签 c++

在 C/C++ 中:

我需要确定一些大数字是否是完全平方数,但我的代码发现像 851659987045856130 这样的数字是有效的,而 922854261.00000000487617621781778 是实际平方根(精度更高)并且不是整数。有没有办法延迟舍入以获得更好的精度? 我知道上面的数字甚至没有“完美的平方最后一位数字”,但我想知道一般情况下是否有可能检查这么大的数字是否实际上是一个合理但更高的完美平方精度高于标准。

最佳答案

这里最好的做法是使用精确平方根算法。如果该数字代表您正在测试的大小,您甚至不需要多精度算术包 — 然而,这样的包将是获得此类算法实现的最简单的地方。事实上,它可能会直接实现 is_square(并且可能比计算平方根更快)。

如果您对滚动自己的实现感到好奇,通常的方法是牛顿法;例如如在 https://en.wikipedia.org/wiki/Integer_square_root 中所见.

关于c++ - 数字如 0.999999 四舍五入为 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38385428/

相关文章:

c++ - 使用C++将时间戳转换为格式化的日期时间

c++ - 具有初始值的类构造

c++ - fread 丢失二进制数据

c++ - Qt 通过 const 引用传递——效率更高吗?为什么?

c++ - 检查数组中的重复数字

c++ - 错误 : expected ‘,’ or ‘...’ before ‘>’ token

c++ - 模板类中的静态常量成员初始化

c++ - 在派生类接口(interface)中隐藏基类的特定功能

c++ - 在轮廓/OpenCV c++ 中搜索轮廓

c++ - 在 C++ 中跳回到函数的开头