【发布时间】:2010-11-04 13:21:19
【问题描述】:
我想使用两个浮点数进行双除(Direct Compute 似乎不支持双除)。
这可能吗?
这是我目前尝试过的(c#代码,后面应该是HLSL):
int count = 7;
double value = 0.0073812398871474;
float f1 = (float)value;
float f2 = (float)((value - f1));
float r1 = f1 / count;
float r2 = f2 / count;
double result = (double)r1 + (double)r2;
0,00105446285765182(结果)
0,00105446284102106(正确结果)
这与 f1 中的舍入有关。如果值改为:
double value = 0.0073812344471474;
那么结果是正确的。
【问题讨论】:
-
如果 count 是 2 的幂,精度可能会提高。
-
@贾斯汀有趣。这是真的。为什么?不幸的是,计数并不总是二的幂。
-
如果你没有双除,你有双乘吗?
-
@testalino:浮点数像分数 * 2^(exponent) 一样存储,因此当您执行除以 2 的幂时,它通常可以只调整指数而不会损失任何精度。这只会提高您的
r1和r2精度,而不是原来的f1和f2,它们已经四舍五入以适合浮点数。 -
@Naelin 是的,乘法有效
标签: c# floating-point directx-11 compute-shader