我想编写一个程序,让用户可以用直尺和指南针绘制点,线和圆.然后我希望能够回答这个问题,"这三个点是否共线?" 要正确回答,我需要在计算点时避免舍入误差.
这可能吗?我怎样才能代表记忆中的点?
(我查看了一些不寻常的数字库,但我没有找到任何声称提供精确算术和确保终止的精确比较的内容.)
我正在测试Brainteasers的代码:
double d1 = 1.000001;
double d2 = 0.000001;
Console.WriteLine((d1 - d2) == 1.0);
Run Code Online (Sandbox Code Playgroud)
结果是"假的".当我更改数据类型时:
decimal d1 = 1.000001M;
decimal d2 = 0.000001M;
decimal d3 = d1-d2;
Console.WriteLine(d3 == 1);
Run Code Online (Sandbox Code Playgroud)
该程序写出正确的答案:"真".
此问题仅在浮点后使用6位数.15位数的精度怎么样?