我有以下问题 - 我有3个无符号整数:a,b,c。 c是我正在使用的无符号整数类型可以采用的最大值(因此< = c&& b< = c)。我知道a * b可能会溢出,而且我知道数字(a * b / c)不会溢出(基本上我需要一个数字,如果他将a,b,c转换为无符号整数类型就足够了比特并执行乘法和除法)。什么是最快的方式来查找数字(a * b / c)而不必转换为具有更多位的无符号整数类型(最好具有最低错误)?
我目前正在使用浮动投射,我想知道是否有一种方法可以产生更好,更快的结果。我知道a * b / c可以表示为a /(c / b)或b /(c / a),也可以选择扩展余数,但是根据我扩展它的次数,错误可能很大,而且我不确定在浮动铸造和浮动分割方面的速度如何比较。我看过Avoiding overflow in integer multiplication followed by division虽然我希望通过给定关于a,b,c的附加信息,可以使用更好/更快的方法。我链接的帖子也没有提及有关速度的任何内容。
编辑:它也更适合在GPU上快速工作的方法,但不是必需的。 编辑2:如果有人想知道为什么我需要这个 - 我使用uint来表示[0,1]中的数字,因为我需要算术运算来不累积错误。