从__ddiv_ru的documentation中,我希望以下代码结果是ceil(8/32)= 1.0,而我得到0.25。
#include <iostream>
using namespace std;
__managed__ double x;
__managed__ double y;
__managed__ double r;
__global__ void ceilDiv()
{
r = __ddiv_ru(x,y);
}
int main()
{
x = 8;
y = 32;
r = -1;
ceilDiv<<<1,1>>>();
cudaDeviceSynchronize();
cout << "The ceil of " << x << "/" << y << " is " << r << endl;
return 1;
}
我想念什么?
答案 0 :(得分:4)
您得到的结果是正确的。
您正在使用的内在函数对双精度除法使用特定的IEEE 754-2008舍入模式为单元的最后一位(ulp)进行舍入模式。这可以控制在无法以所选格式准确表示结果时发生的情况。在这种情况下,您选择了舍入,这意味着除法结果中产生的有效位数的最后一位被舍入(向+∞)。在您的情况下,所有舍入模式都应产生相同的结果,因为结果可以用IEEE 754 binary64格式精确表示(舍入为2的幂)。
在编写任何浮点代码之前,请先阅读NotAllowedError的所有内容。