【发布时间】:2009-05-22 07:58:22
【问题描述】:
我正在计算给定横坐标 x 的线上的点的纵坐标 y。该线由其两个端点坐标 (x0,y0)(x1,y1) 定义。端点坐标是浮点数,必须以浮点精度进行计算才能在 GPU 中使用。
数学以及因此幼稚的实现都是微不足道的。
令 t = (x - x0)/(x1 - x0),然后 y = (1 - t) * y0 + t * y1 = y0 + t * (y1 - y0)。
问题在于 x1 - x0 很小的时候。结果将引入取消错误。当与 x - x0 之一结合时,在除法中,我预计 t 会出现重大错误。
问题是是否存在另一种更准确地确定 y 的方法?
即我应该先计算 (x - x0)*(y1 - y0),然后除以 (x1 - x0) 吗?
y1 - y0 的差异总是很大。
【问题讨论】:
-
你能使用三角函数比如 sin 或 cos 吗? AFAIK,所有较新的 GPU 都将这些作为一条指令,所以它应该很快。
-
如果 x 在 x0 和 x1 之间,则没有大错误。在计算 t 时,您处理相同数量级的值:x-x0、x1-x0。
标签: c++ c optimization math numerical