首页 > 解决方案 > 配对功能 - 对于大的实际输入,输出变为指数

问题描述

我正在使用一个康托尔配对函数,它需要两个实数输出唯一的实数。

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

现在我的问题是,有没有办法调整对函数,以便即使对于大输入数字,输出也相对较小。

标签: algorithmmathintegermappingdeterministic

解决方案


由于浮点精度限制,康托尔配对不适用于浮点,因为:

  • 一些不同的配对可能会给出相同的结果
  • 检索 a, b 可能会给出与以前不同的值

对于整数(包括长算术),您必须使用

return (a+b)*(a+b+1) // 2 + b

推荐阅读