aとb a <bの間のどこにxが最も近いか?

Given two integers $a$ and $b$ with the relation $a<=b$, and a third number $x$ between them $a<=x<=b$, find the number which is closest to $x$, either $a$ or $b$, without using comparisons.

The permitted integer operations are : additions, multiplications, subtractions, exponentiation and any operation in a field or ring (not division). The purpose is to avoid using comparison operators like $<$ or $>$, but if they can be implemented using only the permitted operations is fine.

基本的には、パズルは次のような機能を設計することにあります。

$ f(x、a、b)= \ begin {cases} b、abs(x-a)\ geq abs(x-b)\\ a、abs(x-a)\ lt abs(x-b)\ end {cases} $

ここで$ abs(x-a)$は$ x-a $の絶対値、すなわち$ x $と$ a $の間の距離です。

2
= を許可していますか?
追加された 著者 Nick,
@guglielmolondon私たちは部門を使用できますか? (累乗と-1で)
追加された 著者 Jawad Al Shaikh,
ちょうど分かります:ここでのxは整数である必要がありますか? (もしそうでなければ、私が何かを見逃していない限り、私たちが持っているすべての操作は連続的であり、求められている操作はそうではないので、事を明白に行うことはできません。
追加された 著者 Pankaj,
別の明確化要求:定数が許可されていますか?私たちが1か-1のいずれかが許されれば、私たちは部門を実装することができるので、私は推測していません。
追加された 著者 Pankaj,
ああ、もう一つの質問。あなたがこれを知っている状況(1)は可能であり、私たちはそれを行うことに挑戦しているか、(2)それが可能かどうかを知り、それを理解することに挑戦しているか、それは可能であり、私たちが何ができるのかを見ていますか?
追加された 著者 Pankaj,
$ a/b = ab ^ { - 1} $のため除算を指定する必要はありません。
追加された 著者 Pankaj,
うーん、OK。 FWIW私の気持ちは、この操作のレパートリーを考えればおそらく不可能だということですが、今は証拠がありません...
追加された 著者 Pankaj,
はい、有用であると思われる定数は許されています。
追加された 著者 Danny,
@GarethMcCaughan :))答えは3です。私は答えを知らない、私は解決策を探しています。
追加された 著者 Danny,
関数select(a、b、t)=(1-t)a + t * bのようなものが欲しい。ここでtは決定変数{0,1}である。比較演算子<、>と=は、入力がビットの場合は多項式関数を使用して簡単に実装でき、整数に似たものが可能かどうか疑問です。
追加された 著者 Danny,

3 答え

これにより、LoDの除算がゼロバグで修正されました。

$ X(x)=(xa) - (bx)$と$ \ operatorname {sign}(y)= \ dfrac {y} {| y | + 0 ^ {| y |}} $を使用します。 $ x $が$ b $に近い場合、$ x $が$ a $、$ + 1 $に近い場合、$ \ operatorname {sign}(X)$は$ -1を返し、$ x $の場合は$ 0 $を返します$ a $と$ b $から等距離です。
 a +(1 + \ operatorname {sign}(X(x)))b)$、$、$、これは、$ x $ならば$ \ dfrac {a + b} {2} $を返し、それ以外の場合は$ a $や$ b $を返す。

2
追加された
ニースの改善:)
追加された 著者 Jawad Al Shaikh,

これは実数で累乗が許可されている場合に機能します(これにより除算が可能になります)

$ \ sqrt {x²} $で$ x $の絶対値を取ることができます  今、$ X =(x-a) - (b-x)$の符号を知りたい  $ sign(X)= \ frac {X} {| X |} $
記号を絶対値で除算すると、  $ sign(X)= -1 $ならば、最も近いものはbです。$ sign(X)= - 1 $が最も近いものは、aです。
 あなたの関数は$ f(x、a、b)= \ frac {(1-サイン(X))* a} {2} + \ frac {(1 + sign(X))* b} {2} $

1
追加された

私の解決策は、 = を比較として、 abs を操作として使用できるという事実に基づいています。
これが許可されない場合、私は自分の答えを削除します。

Since $a \leq x \leq b$ we need to compare somehow, without using < or > these positive numbers.

$x - a$ and $b-x$.
To make it easier let's make this notation.
$n = x- a$ and $m = b-x$.
now let's take into consideration the result of...
$ (n-m) - |n-m| $.
If this result is exactly 0 it means $n\geq m$ which means $x-a \geq b-x$ which means b is closer.

要約すると、関数はこの形式(ここに含まれる疑似コード)を持つことができます。

(x-a-b + x) - | x -a -b + x | == 0)? b:a $

または

(2 * x - (a + b)) - | 2 * x - (a + b)| == 0) b:a $

0
追加された