__ddiv_ru的语义

时间:2018-12-28 05:27:04

标签: cuda intrinsics

从__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;
}

我想念什么?

1 个答案:

答案 0 :(得分:4)

您得到的结果是正确的。

您正在使用的内在函数对双精度除法使用特定的IEEE 754-2008舍入模式为单元的最后一位(ulp)进行舍入模式。这可以控制在无法以所选格式准确表示结果时发生的情况。在这种情况下,您选择了舍入,这意味着除法结果中产生的有效位数的最后一位被舍入(向+∞)。在您的情况下,所有舍入模式都应产生相同的结果,因为结果可以用IEEE 754 binary64格式精确表示(舍入为2的幂)。

在编写任何浮点代码之前,请先阅读NotAllowedError的所有内容。