既存の範囲があります: $start--$end (例: 5--10)。
変数 $param を与えます:
If $param If $param>$end , then $param=$end
if else、三項、その他の論理アルゴリズムは必要ありません (ただし、シンプルで効率的です)
この要件を達成するための数学的アルゴリズムを探しています
理解できません
このアルゴリズムは存在しません(比較を使用しません)。言語では、ビット操作の高速化については考えません。
たとえ存在するとしても、2 つの乗算と 1 つの除算が含まれている必要があります。この時間は if - else に相当します。
つまり、それは存在しません。
例: 5--10 (x-y)
a=x-z
b=y-z
aは0より大きく、bは0より大きいため、判定番号は1(z)
とする。したがって、z=x=5となります。
判定番号が 11(z) だとします
a は 0 未満であり、b は 0 未満であるためです。したがって、z=y=10となります。
判定番号が 6(z) であるとします
a は 0 より小さく、b は 0 より大きいためです。それでうまくいきません。
痛いです
or とヘテロモジュラー丸めのさまざまな組み合わせを試しましたが、本当に答えが得られません
このアルゴリズムを実装する可能性について議論しましょう
投稿者はアルゴリズムを求めましたが、これは実際には存在しません= _=...
このアルゴリズムは存在しません (比較を使用しません)。インタープリタ型言語の場合、ビット演算によって速度が向上するとは考えてはいけません。
たとえ存在するとしても、2 つの乗算と 1 つの除算が含まれている必要があります。この時間は if - else に相当します。
つまり、それは存在しません。
公式自体はおそらく存在します。判断はできません
ただし、実際には非常に高速な公式はありません。私が推測したところ、乗算/除算演算を使用する必要があることがわかりました。
なぜ私の 4 階が飲み込まれたのでしょうか
私も計算を色々組み合わせてみましたが、結果は得られませんでした
実装の可能性について議論しましょう
導出過程を調べてください
計算式自体はおそらく存在します。判断はできません
ただし、実際には非常に高速な公式はありません。私が推測したところ、乗算/除算演算を使用する必要があることがわかりました。
x = 5 (y x = y (y は区間 [5,10] 内にあります)
x = 10 (y >= 10)
---------- --------------------------------------------------
オーナー 座標図を描きます。これは基本的に稲妻の形をした曲線に相当します (下の図)。幾何学を勉強したとき、このような曲線方程式を見たことはありません。 。
| ?
a,b E [5,10]
x=a+1;
and a には大きな価値があるとは思えません....
それは可能であるはずですPHPでやろう!
私は数学が苦手なので、分割しないと (つまり if を使わずに) f(x) を解く方法は、今のところ思いつきません。数学の皇帝を待つだけです。 ...
min と max を使用するのはそれほど簡単ではありません。
そうです
以上です。
確かに。最小値もあれば最大値もあります...
皆さん、続けてください。 。
また勉強になりました
夢想家を目覚めさせる言葉
function getnum($param, $start, $end)
$min = min($param, $start, $end);
$max = max($param, $start, $end); if ($min == $param)
{
$param = $min ;
if ($max == $param)
{
$param = $max;
return $param; }
min と max を使うのは非常に簡単ではないでしょうか。
PHP コード
$param = 4;
echo min(max($param,5),10); 以上です。
=_=...
foolbirdflyfirst有码了啊。你还写
一语惊醒梦中人啊
function getnum($param, $start, $end)
{
$min = min($param, $start, $end);
$max = max($param, $start, $end);
if ($min == $param)
{
$param = $min;
}
if ($max == $param)
{
$param……
好歹尊重一下别人的劳动的成果嘛
=_=...
foolbirdflyfirst有码了啊。你还写
引用 21 楼 jasmine_xiaocao 的回复:
一语惊醒梦中人啊
function getnum($param, $start, $end)
{
$min = min($param, $start, $end);
$max = max($param, $start, $end);
if ($mi……
这位同学,你跑题严重啊 呵呵~~
好歹尊重一下别人的劳动的成果嘛
引用 22 楼 ci1699 的回复:
=_=...
foolbirdflyfirst有码了啊。你还写
引用 21 楼 jasmine_xiaocao 的回复:
一语惊醒梦中人啊
function getnum($param, $start, $end)
{
$min = min($param, $start, $end);
……
楼主什么意思???
这位同学,你跑题严重啊 呵呵~~
引用 23 楼 jasmine_xiaocao 的回复:
好歹尊重一下别人的劳动的成果嘛
引用 22 楼 ci1699 的回复:
=_=...
foolbirdflyfirst有码了啊。你还写
引用 21 楼 jasmine_xiaocao 的回复:
一语惊醒梦中人啊
function getnum($param, $start,……
题目说了不能用if else 的哦 亲~ 楼主什么意思???
引用 24 楼 mr_merlin 的回复:
这位同学,你跑题严重啊 呵呵~~
引用 23 楼 jasmine_xiaocao 的回复:
好歹尊重一下别人的劳动的成果嘛
引用 22 楼 ci1699 的回复:
=_=...
foolbirdflyfirst有码了啊。你还写
引用 21 楼 jasmine_xiaocao 的回复:
一语惊醒梦……
这样用也不行??那我错了。。。。
题目说了不能用if else 的哦 亲~引用 25 楼 jasmine_xiaocao 的回复:
楼主什么意思???
引用 24 楼 mr_merlin 的回复:
这位同学,你跑题严重啊 呵呵~~
引用 23 楼 jasmine_xiaocao 的回复:
好歹尊重一下别人的劳动的成果嘛
引用 22 楼 ci1699 的回复:
=_=...
foolbirdflyfir……
可以用min,max不是很简单?
PHP code
$param = 4;
echo min(max($param,5),10);
就行了吧。
不错,如果不可以用min,max呢?
看了半天没想出来
看来我的算法水平差的没法
学习学习
function foo($a, $b, $c) { Return (((($c-$a) + (($c-$a) >> 31)) ^ (($c-$a) >> 31)) - ((($c-$b) + (($c-$b) >> 31)) ^ (($c-$b) >> 31)) + $a + $b) / 2;}echo foo(20, 30, 50); // 30
用abs的话就简单明了了
引用 17 楼 foolbirdflyfirst 的回复:
可以用min,max不是很简单?
PHP code
$param = 4;
echo min(max($param,5),10);
就行了吧。
不错,如果不可以用min,max呢?
我也不知道。。。#30的人才啊。哈哈
我也不知道
分别将 所求数 转化为 下界 进制数 和 上界 进制数,
所求结果 为
example : (5,10,x) x=8
x1 = 13(mod5)
x2 = 08(mod10)
answer = (x1msb ⊙ x2msb)*(x1msb*5+x2msb*10)+(x1msb xor x2msb)*x
这里的x1msb x2msb需要进行 高位整数除法处理后的结果 才能得到二进制的 0,1
楼主威武,不知道你在想什么
观望中。。。。
路过学习。
有这样实现的算法?
x = 5 (y <= 5)
x = y (y在[5,10]区间)
x = 10 (y >= 10)
------------------------------------------------------------
楼主画个坐标图,基本相当于闪电模样的一个曲线(下图),学几何的时候没见过这种曲线方程。。
|
|
|
/(10)
/
/
|(5)
|
|
|
|
如9楼所言,如果楼主要的是数学算法的话,这种
?? ?? ?? ?? ?? ?? ??
/
/
/
/
/
?? ?? ?? ?? ?? ?? ??
类似的函数曲线还真是没见过啊,
只能是分段函数了,分为三段,这样貌似就得用if else了。
额- -我的图怎么变成这样子了。。。。
那个曲线就是类似于Z的Y轴对称图形,这样子应该只能是分段函数了吧?因为它一点也不圆滑是有死角的
引用 9 楼 foolbirdflyfirst 的回复:
x = 5 (y <= 5)
x = y (y在[5,10]区间)
x = 10 (y >= 10)
------------------------------------------------------------
楼主画个坐标图,基本相当于闪电模样的一个曲线(下图),学几何的时候没见过这种曲线方程。。
|
|
……
public static int get(int start, int end, int param) { param -= start; param &= (int)(((uint)param) >> 31) - 1; param += start; param -= end; param &= (int)((((uint)param) >> 31) ^ 1) - 1; return param += end; } public static int get1(int start, int end, int param) { return new int[] { end, param, start, start }[(((uint)(param - start) >> 30) & 2) | ((uint)(param - end) >> 31)]; }
不知道这个是不是楼主想要的。
int foo(int start, int end, int param){ int tmp[2]; tmp[0] = param; tmp[1] = start; param = tmp[(param-start)>>(sizeof(int)*8-1)]; tmp[1] = end; param = tmp[(end-param)>>(sizeof(int)*8-1)]; return param;}
param = ((start+end)-abs(start-end))/2, 其中abs()为取绝对值运算。
param = (abs(param-start)-abs(param-end)+start+end)/2;
实在是看不懂·
不知道啊