求一算法!!

代码如诗 2012-02-22 12:57:40
加精
现有一区间:$start--$end (例:5--10)。
给一变量$param:
如果$param<$start 则$param=$start
如果$param>$end 则$param=$end
不用if else,三元 等逻辑算法(虽然简单并且效率也高)
求实现此要求的数学算法
...全文
5493 148 打赏 收藏 转发到动态 举报
写回复
用AI写文章
148 条回复
切换为时间正序
请发表友善的回复…
发表回复
ywq0127 2013-10-18
  • 打赏
  • 举报
回复
好老的贴子呀,既然看到了,而且突然想到了一种方法

$interval = array(5, 10);
$x = 8;
$interval[] = $x;
sort($interval);
echo $interval[2];
Hx_Moon_ 2013-09-04
  • 打赏
  • 举报
回复
($start+$param-|$start-$param|)/2 最小值 ($end+$param+|$end-$param|)/2 最大值
LKK 2012-03-05
  • 打赏
  • 举报
回复
牛人多多啊。
calky 2012-03-05
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 xuzuning 的回复:]

真的可以做到吗?
答案是肯定的。否则我也不会将他置顶了

我先来个抛砖引玉
PHP code
function foo($a, $b, $c) {
$f1 = -(($c - $a) >> 31);
$f2 = -(($b - $c) >> 31);
$f3 = 1 ^ ($f1 + $f2);
return $f1 * max($a, $c) + $f2 * min(……
[/Quote]

没看懂、、为何要右移31位
  • 打赏
  • 举报
回复
"不用if else"
有饭不吃,非去吃屎!
开水 2012-03-03
  • 打赏
  • 举报
回复
这么玩算不算?

#include <iostream>
using namespace std;

int func(int i, int start, int end)
{
bool bs = start / i;
bool be = i / end;

i -= ((i - end) * be);
i += ((start - i) * bs);

return i;
}

int main()
{
int i;
while (cin >> i)
{
cout << func(i, 5, 10) << endl;
}
}
feixiang992 2012-03-03
  • 打赏
  • 举报
回复
搞不定
错壹 2012-03-03
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 foolbirdflyfirst 的回复:]

x = 5 (y <= 5)
x = y (y在[5,10]区间)
x = 10 (y >= 10)
------------------------------------------------------------
楼主画个坐标图,基本相当于闪电模样的一个曲线(下图),学几何的时候没见过这种曲线方程。。
|
|
|
/(10)
/
……
[/Quote]
同意,这样的阶跃图像无法得到解析函数,必定是分段函数,并且必需要有指向函数才可正确解析,所以无法避免使用条件,楼主可参考阶跃函数定义,如果一定要使用一个解析式表达,应该只能用拟合或插值等数值办法近似得到。
maquan 2012-03-01
  • 打赏
  • 举报
回复
各位看看这个如何:
/** 取“负值”。
* 如果 $a 为负数,则返回 $a,否则返回 0。
*/
function get_neg( $a )
{
return -1 * ( ( $a - 1 ) >> 63 ) * $a;
}

/** 取“大于等于值”。
* 如果 $a 大于等于 $lower_bound,则返回 $a,否则返回 $lower_bound。
*/
function get_ge( $a, $lower_bound )
{
return $a - get_neg( $a - $lower_bound );
}

/** 取“小于等于值”。
* 如果 $a 小于等于 $upper_bound,则返回 $a,否则返回 $upper_bound。
*/
function get_le( $a, $upper_bound )
{
return $a + get_neg( $upper_bound - $a );
}

/** 取“区间内的值”。
* 如果 $a 在区间 [ $lower_bound, $upper_bound ] 之内,则返回 $a,否则返回最接近的边界值。
*/
function get_inside( $x, $lower_bound, $upper_bound )
{
return get_le( get_ge( $x, $lower_bound ), $upper_bound );
}

$x = array( -3.7, -3, -2.8, -1.7, -1.2, -0.1, 0, 0.0001, 0.1, 1.2, 1.7, 2.8, 3, 3.7 );
$lower_bound = -1.7;
$upper_bound = 1.7;

foreach ( $x as $value ) {
$neg = get_neg( $value );
$inside = get_inside( $value, $lower_bound, $upper_bound );
printf( "%8s => %8s => %8s\r\n", $value, $neg, $inside );
}

// 输出结果如下:
// -3.7 => -3.7 => -1.7
// -3 => -3 => -1.7
// -2.8 => -2.8 => -1.7
// -1.7 => -1.7 => -1.7
// -1.2 => -1.2 => -1.2
// -0.1 => -0.1 => -0.1
// 0 => 0 => 0
// 0.0001 => 0 => 0.0001
// 0.1 => 0 => 0.1
// 1.2 => 0 => 1.2
// 1.7 => 0 => 1.7
// 2.8 => 0 => 1.7
// 3 => 0 => 1.7
// 3.7 => 0 => 1.7



————————————————————————————————
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
  • 打赏
  • 举报
回复
是不是linux的东西
xb12369 2012-02-29
  • 打赏
  • 举报
回复
再来一次,依然是不明白!!!!

superbank 2012-02-29
  • 打赏
  • 举报
回复
小弟来凑凑热闹,下面的原理很简单呵呵!
<?php
$s=5;
$e=10;
$pa=1;
$t1=(($pa<$s) && $pa=$s);
$t2=(($pa>$e) && $pa=$e);
var_dump($pa);
?>
chengwd2008 2012-02-29
  • 打赏
  • 举报
回复
刚才的用分支语句了 发个不用的
int a[3]={end,param,0,start};
int b= (param-start)>>(sizeof(param)*8-1) + (param-end)>>(sizeof(param)*8-1) ;
return a[b];
chengwd2008 2012-02-29
  • 打赏
  • 举报
回复
switch((param-start)>>(sizeof(int)*8-1))
{
case 1:
param=start;
break;
default:
switch((param-end)>>(sizeof(int)*8-1))
{
case 0:
param=end;
break;
}
break;
}
chengwd2008 2012-02-29
  • 打赏
  • 举报
回复
使用switch case或 与或非运算符可以解决,不知道PHP有这些没有
litter_man 2012-02-29
  • 打赏
  • 举报
回复
用个字符串string a=555555678999999999999....。输出a[param]可以解决一个数范围是[5,9]滴
zoutietie 2012-02-28
  • 打赏
  • 举报
回复
http://bbs.axun.co/
zoutietie 2012-02-28
  • 打赏
  • 举报
回复
http://www.axun.co/这里比较详细
xiaoshagua559 2012-02-28
  • 打赏
  • 举报
回复
无能为力!!!!!!!
tttfire 2012-02-28
  • 打赏
  • 举报
回复
什么来的啊? ??
加载更多回复(105)

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧