配对功能-对于大的实际输入,输出变为指数

问题描述

我正在使用Cantor配对功能,该功能需要两个实数输出唯一的实数。

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

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

解决方法

由于浮点数精度的限制,Cantor配对不适用于浮点数,原因是:

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

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

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

对于任何输入,您的函数都满足abs(cantor_pairing(a,b)) = O(max(a^2,b^2))。因此,通过取cantor_pairing(a,b)的第三个根,限制将为max(abs(a)^(2/3),abs(b)^(2/3)) = O(max(abs(a),abs(b))。由于第三个根对实数是双射的,因此将保留cantor_pairing保证的唯一性。另外,您可以使用几乎任何其他奇数根。

,
  1. 该函数不是“指数”函数,而是二次函数。

  2. 您的询问是不可能的。您需要一个函数来返回n²对(a,b)的唯一数字,因此无论编码如何,都需要n²个不同的整数来实现。

  3. 使用浮点数这样做没有多大意义。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...