大单精度浮点数相乘后如何保留更多小数

在CUDA中需要两个大的单精度浮点数(几千乘以几百)相乘,但对我有用的只是小数部分,而这样直接相乘出来的结果是小数都被强制变为0了(整数的位数太多)。有什么办法能保留更多的小数?
我现在的做法是把这两个数分别拆成整数部分和小数部分,把两个整数的乘积扔掉。
就是比如1234.567895拆成A=1234.0,B=0.567895;把987.654321拆成C=987.0,D=0.654321。然后对于1234.567895987.654321我只计算AD+BC+BD,
这样能得到2位准确的小数。但我还想再争取多一位的小数,除了双精度大家有什么办法呢?

有个算法叫kanhan什么的,具体忘了,你可以看看。另外你的方法不错。但是我觉得可能还可以优化,比如小数和速度相乘可以去掉明确是速度的部分

谢谢!但是能说得更具体一点吗?thx!

查了下,似乎kanhan算法只适用于加法?但是1234.0*0.567895出来的数值就只有两位有效的小数呢

学习了,嘿嘿

不知道有什么好的方法没有,不过你的误差就是来自于大数和小数的相乘,即(AD和BC),10^4量级的float数本身就只有2位小数精度,你能解决10^4 * 10^-2的精度问题,就能够提高你的计算精度