Je calcule l'ordonnée y d'un point sur une ligne à une abscisse x donnée. La ligne est définie par ses deux coordonnées (x0, y0) (x1, y1). Les coordonnées des points d'extrémité sont des flottants et le calcul doit être effectué avec une précision flottante pour une utilisation dans GPU.Calcul d'ordonnée d'intersection de lignes le plus précis avec des flottants?
Les mathématiques, et donc l'implémentation naïve, sont triviales. Soit t = (x - x0)/(x1 - x0), alors y = (1 - t) * y0 + t * y1 = y0 + t * (y1 - y0).
Le problème est lorsque x1 - x0 est petit. Le résultat introduira une erreur d'annulation. Quand il est combiné avec celui de x - x0, dans la division j'attends une erreur significative dans t.
La question est de savoir s'il existe une autre façon de déterminer y avec une meilleure précision?
est-ce que je devrais calculer (x - x0) * (y1 - y0) en premier et diviser par (x1 - x0) après?
La différence y1 - y0 sera toujours grande.
AFAIK, tous les GPU les plus récents ont ces instructions uniques, donc ça devrait être rapide. –
Si x est compris entre x0 et x1, il n'y a pas de grosse erreur. Lorsque vous calculez t, vous traitez des valeurs du même ordre de grandeur: x-x0, x1-x0. –