如果组运算是乘法,那么如果 n 是最高位,则 r1=1/power(2,n-1) 是您可以运算的最小十进制数,并且集合 [r1,2 * r1,4 * r1,8 * r1...1] union [-r1, -2 * r1, -4 * r1,....-1] union [0] 将是您所期望的组。对于整数 [1,0,-1] 是组。
如果组操作可以是其他任何东西,则形成 n 组有效组,
A(r)=cos(2*Pi*r/n) 从 r=0 到 n-1
和组操作是
COS(COSINV(A1)+COSINV(A2))
不知道你要不要这个......
或者如果您希望将 INFINITY 设置为有效组,则
简单的答案:GROUP OPERATION = AVG(A1,A2) = (A1+A2)/2
或者某些函数存在 F,它具有 FINV 作为它的逆,然后是 FINV(F(A1)+F(A2)/2) F 的示例是对数、逆、平方等。
double a = drand();
while ( forever )
{
double b = drand();
a = (a+b)/2
//invariant - a is a valid floating point number
}
或者,如果您希望将 DIGITAL 格式的 INFINITY 集作为有效组,则令 L 为最低浮点数,H 为最高浮点数
那么组操作 = AVG(A1,A2, L, H) = (A1+A2+L+H)/4
对于所有正数,此操作将始终在 L 和 H 内。
出于实际目的,您可以将 L 作为最低十进制数的四倍,将 H 作为(最高十进制数/4)。
double l = (0.0000000000000000000000000//1) * 4
double h = (0xFFFFFFFFFFFFFFFFFFFFFF///F) / 4
double a = abs(drand()) / 4;
while ( forever )
{
double b = abs(drand()) / 4;
a = (a+b+l+h)/4
//invariant - a is a valid floating point number
}
这具有所有正浮点数 / 4 的子集。