You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CUDA代码中(x+y)²/xy公式正数输入输出负值问题

问题原因及解决方案

问题原因

  • 32位整数溢出:
    代码中x和y均为32位有符号int类型,当x=46340、y=1时,x+y=46341,其平方值为2147488281,而32位有符号int的最大值是2147483647(即2³¹-1),该平方值超出了int的取值范围,触发有符号整数溢出。GPU编译环境下,溢出后的数值会按补码规则回绕为负数,后续除以正数x*y=46340后得到负数结果,与正确值46342不符。

解决方案

  • 改用64位整数进行计算:
    将中间计算的数值类型提升为64位的long long,确保足够容纳大数值运算,同时修正eq的类型声明(CUDA中long通常为32位,需用long long表示64位整数)。修改核心计算代码如下:
    long long sum = x + y;
    long long product = static_cast<long long>(x) * y;
    long long eq = (sum * sum) / product;
    
    或者简化为一行:
    long long eq = (static_cast<long long>(x + y) * (x + y)) / (static_cast<long long>(x) * y);
    
    这样46341²的计算会在64位整数范围内进行,不会触发溢出,最终得到正确结果46342。

内容的提问来源于stack exchange,提问作者Box

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 19:45:51