由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 简单c++问题,大家练练手
相关主题
a[i]=i++重载 ^ 操作符编译出错
有没有会自动聚合的操作符重载或宏?关于 expression template 这种叫法
弱人再问一个关于Java的问题C++编程问题:union inside struct
在一个有关位运算的文章里看到以下三种表达式,请问是什么意思?请教C++ STL中priority_queue模板参数中的Compare函数
c++ question请问以下代码有什么错误?
MATLAB再求助,判断几个变量关系,并返回一个具体值,详见帖子请问c++中操作符可以声明为虚函数吗?
【讨论】为什么要用友员来实现算符重载?一个C的void指针的问题
这段code有啥问题?问个函数指针指向操作符的问题
相关话题的讨论汇总
话题: mod话题: 第一个话题: 小于话题: 参数话题: 副作用
进入Programming版参与讨论
1 (共1页)
l*******r
发帖数: 322
1
假设求模运算符"%"限定第一个操作符必须大于等于零,第二个操作符必须大于零
现在希望推广这个运算符,使得第一个参数可以小于零
0. 给出你对第一个参数小于零时求模运算的定义
1. 补充完整以下函数,使得第一个参数可以小于零
int mod( int a, int b)
{
// ...
}
2a. 补充完整以下宏定义,使得第一个参数可以小于零
#define MOD(a,b) // ...
2b. 你写的宏定义可能有副作用吗?
s*******d
发帖数: 59
2
mod(-a, b) = b - mod(a, b)
#define MOD(a, b) ((a)>0 ? (a)%(b) : ((b) - (-(a))%(b)))
一种副作用就是MOD(a++, b)会错误改变a
l*******r
发帖数: 322
3

so, in your definition,
mod(-b,b) = b - mod(b,b) = b - 0 = b
right?
这个副作用好像是没有办法避免的是吧
安全的做法只能定义一个函数了

【在 s*******d 的大作中提到】
: mod(-a, b) = b - mod(a, b)
: #define MOD(a, b) ((a)>0 ? (a)%(b) : ((b) - (-(a))%(b)))
: 一种副作用就是MOD(a++, b)会错误改变a

s*******d
发帖数: 59
4
呵呵,bug处处有
f******s
发帖数: 140
5

这样的话,可以是
mod(-a, b) = mod(b - mod(a, b), b)

【在 l*******r 的大作中提到】
:
: so, in your definition,
: mod(-b,b) = b - mod(b,b) = b - 0 = b
: right?
: 这个副作用好像是没有办法避免的是吧
: 安全的做法只能定义一个函数了

l*******r
发帖数: 322
6
b-mod(a,b) 已经确定落在(0,b]的范围内
再做一次mod运算好像不太值得(我不清楚mod是怎么被执行的,有理由假设他比加减要复杂一
点)
我的建议是
mod(-a,b) = (mod(a,b)==0) ? 0 : (b-mod(a,b))
如果编译器能优化公共表达式的话,只需要做一次mod运算
如果不能,也能稍微降低复杂性,on average 一点点
这是我到目前想到的

【在 f******s 的大作中提到】
:
: 这样的话,可以是
: mod(-a, b) = mod(b - mod(a, b), b)

1 (共1页)
进入Programming版参与讨论
相关主题
问个函数指针指向操作符的问题c++ question
能否对某个库进行操作符重载?MATLAB再求助,判断几个变量关系,并返回一个具体值,详见帖子
《Python参考手册 (第4版)》[PDF]【讨论】为什么要用友员来实现算符重载?
C++的"初始化"小结这段code有啥问题?
a[i]=i++重载 ^ 操作符编译出错
有没有会自动聚合的操作符重载或宏?关于 expression template 这种叫法
弱人再问一个关于Java的问题C++编程问题:union inside struct
在一个有关位运算的文章里看到以下三种表达式,请问是什么意思?请教C++ STL中priority_queue模板参数中的Compare函数
相关话题的讨论汇总
话题: mod话题: 第一个话题: 小于话题: 参数话题: 副作用