algorithm - 配对功能 - 对于大的实际输入,输出变为指数
问题描述
我正在使用一个康托尔配对函数,它需要两个实数输出唯一的实数。
def cantor_paring(a,b):
return (1/2)*(a+b)*(a+b+1) + b
当输入对数很小时,这对我很有用。
cantor_paring(3,5)
41.0
但是,当输入对数很大时,输出会变得非常大。
cantor_paring(195149767,9877)
1.9043643420693068e+16
现在我的问题是,有没有办法调整对函数,以便即使对于大输入数字,输出也相对较小。
解决方案
由于浮点精度限制,康托尔配对不适用于浮点,因为:
- 一些不同的配对可能会给出相同的结果
- 检索 a, b 可能会给出与以前不同的值
对于整数(包括长算术),您必须使用
return (a+b)*(a+b+1) // 2 + b
推荐阅读
- javascript - 退出后如何重新启动我的代码?
- sql-server - SQL Server - 逗号分隔的结果
- ajax - 使用 Bloodhound 时如何将 ajax 全局事件设置为 false
- ibm-datapower - 为大型 JSON 有效负载配置 DataPower
- powershell - Powershell 5将项目目录复制到目录错误
- html - 在最新的 bootstrap v4 中,仅在 div 而不是任何其他类型的 dom 上使用 col 类名是否有好处?反之亦然?
- node.js - 在节点中动态导入语言环境文件
- node.js - 节点脚本或 npm 模块检查文件是否更改
- python - 用于启动远程 Python 脚本的 Windows 命令
- ios - 调用 Api 时内存泄漏