a****l 发帖数: 8211 | 1 【 以下文字转载自 CS 讨论区 】
发信人: acectl (磨), 信区: CS
标 题: 怎样实现这个线性转换的算法
发信站: BBS 未名空间站 (Tue Nov 23 14:38:29 2010, 美东)
算法的原理很简单,输入x,输出y.x的范围(0-1000)的整数,y的范围是(0-1500)的整数,
将x线性的按比例关系转换成y,也就是y=1.5x,小数点后的舍入方法随便(就是说y=2.5的
话算2或者3都可以)
现在的关键是,x是一个16位的整数(unsigned int, 16bits),y也是一个16位的整数,要
求是计算过程中不能用到32位的运算,就是说不能把x,y转换成32位算好再转换回来,这
该怎么计算?有谁知道这个怎么办吗?显然,查表的方法也是不允许的(内存的占用必须是
固定的,不能随范围变化而变化)
另外的一个要求是,y的范围是可以变的,所以不能用固定的乘1.5的算法,y应该可以是任
何一个16位整数可表达的范围. | p***o 发帖数: 1252 | 2 y = 1.5x = x+x/2 = x+(x>>1)
依此类推,多少都行。
【在 a****l 的大作中提到】 : 【 以下文字转载自 CS 讨论区 】 : 发信人: acectl (磨), 信区: CS : 标 题: 怎样实现这个线性转换的算法 : 发信站: BBS 未名空间站 (Tue Nov 23 14:38:29 2010, 美东) : 算法的原理很简单,输入x,输出y.x的范围(0-1000)的整数,y的范围是(0-1500)的整数, : 将x线性的按比例关系转换成y,也就是y=1.5x,小数点后的舍入方法随便(就是说y=2.5的 : 话算2或者3都可以) : 现在的关键是,x是一个16位的整数(unsigned int, 16bits),y也是一个16位的整数,要 : 求是计算过程中不能用到32位的运算,就是说不能把x,y转换成32位算好再转换回来,这 : 该怎么计算?有谁知道这个怎么办吗?显然,查表的方法也是不允许的(内存的占用必须是
| l******e 发帖数: 12192 | 3 keyword: Bresenham
【在 a****l 的大作中提到】 : 【 以下文字转载自 CS 讨论区 】 : 发信人: acectl (磨), 信区: CS : 标 题: 怎样实现这个线性转换的算法 : 发信站: BBS 未名空间站 (Tue Nov 23 14:38:29 2010, 美东) : 算法的原理很简单,输入x,输出y.x的范围(0-1000)的整数,y的范围是(0-1500)的整数, : 将x线性的按比例关系转换成y,也就是y=1.5x,小数点后的舍入方法随便(就是说y=2.5的 : 话算2或者3都可以) : 现在的关键是,x是一个16位的整数(unsigned int, 16bits),y也是一个16位的整数,要 : 求是计算过程中不能用到32位的运算,就是说不能把x,y转换成32位算好再转换回来,这 : 该怎么计算?有谁知道这个怎么办吗?显然,查表的方法也是不允许的(内存的占用必须是
| a****l 发帖数: 8211 | 4 this is a very good solution. thanks.
【在 p***o 的大作中提到】 : y = 1.5x = x+x/2 = x+(x>>1) : 依此类推,多少都行。
|
|