C浮动:如何绕过它们获得2d几何(线)

Cha*_*les 2 c floating-point precision integer computational-geometry

我目前在C中做一些2D几何,主要是相交的线.这些线有各种斜率:0.001到1000(例子,我甚至都不知道).

到目前为止我一直在使用浮点数并且不必担心值是否非常小(然后浮点将存储0,0011作为1e-3而没有舍入)或非常高(然后1001将存储为1e3)在这两种情况下,在相关的情况下几乎没有精度损失.

但现在我想尝试没有浮点数,整数.如何保持计算的精确度?我可以有一个标志告诉我斜坡是大还是小,然后考虑十分之一的大坡度和十倍小的坡度,这样小坡度的倒圆就没问题了,大斜坡的情况下也没有溢出.但这感觉很头疼.

基本上我仍然需要能够区分0.2和0.4的斜率以及斜率为1000和2000的溢出侧(假设在1000处溢出 - 这里没有问题).

还有其他想法吗?

chu*_*ica 6

斜率存储为一对整数

struct slope {
  int delta_y;
  int delta_x;
};
Run Code Online (Sandbox Code Playgroud)

这允许一个宽范围的像斜坡0+/- 1/INT_MAX ... +/- INT_MAX,甚至是垂直的.通过仔细编码,可以进行精确的计算.

迟到的信用:这很像@Ignacio Vazquez-Abrams评论.