【发布时间】:2011-05-26 16:05:36
【问题描述】:
rshift = ((J[i]-1)*((2*net)-J[i]) >> -1);
L[i] = rshift + K[i]-J[i];
当我编译这个时,我得到与第一行对应的“错误:表达式必须具有整数或枚举类型”。除了 'i' 都具有双精度。
它既不适合左移也不适合右移。我正在使用 Fedora 12,并且我有 nvcc 3.2,V0.2.1221。对于 c++(g++ 编译器),它可以完美运行。
但是当我尝试它时
rshift = ((J[i]-1)*((2*net)-J[i]) >>= -1);
L[i] = rshift + K[i]-J[i];
这是“错误:表达式必须是可修改的左值”我尝试了很多但无法修复它。有什么想法吗?
【问题讨论】:
-
我不确定我是否遵循。您希望通过对双精度浮点值执行移位来实现什么?
-
a>>=b 是 a=a>>b 的简写;您试图将值写入不是左值(不是可修改实体)的表达式
-
基本上我正在尝试将 fortran 程序转换为 cuda。 @talonmies 所以你认为我应该改变 rshift 的定义。 @osgx thanx,我只是在学习逻辑转换。
-
@Population Xplosive:Fortran 也没有浮点数的移位操作。所以无论你在翻译什么,你都误解了一些东西。
-
@Population Xplosive:对。 ISHFT 是整数位移位。默认情况下,在 Fortran 77 或更早版本中,名称以 I、J、K、L、M 或 N 开头的变量是隐式整数。所有的数值常数也是整数。如果代码 sn-p 执行的不是整数位移,我会感到非常惊讶。