(EL-506A、EL-506P、EL-546D模拟器系列)
rt,这个东西其实按理来说很简单的,都是正角度的情况下,∠A>∠B,那么直接减;反过来就反着减然后取负数。
问题就在于比较大小这里,我的角度为了提高精度并方便运算,储存方式是bool isNegative; int D; int M; double S。而且可以储存例如123°23333′323.09189″这种奇葩值。
这样比较起来就很麻烦了,要先将其分和秒都规范到60以内,然后再比较。这个还好,我已经写了怎么的程序来处理这个问题了。
但是,我们都知道,double在运算时具有精度问题,那么有没有可能本来是∠A=1°2′62.9999998″,∠B∠A=1°2′63″,∠A<∠B在处理了之后,最后一个double出现精度错误,直接变成∠A=1°3′3.0000000000000002″,∠A=1°3′3.0000000000000001″?这样就很讨厌了。我是真的搞不明白为什么包括Csharp在内的各种编程语言,都要给小数带一个这么烦人的精度问题,搞得我算法都不能好好写
rt,这个东西其实按理来说很简单的,都是正角度的情况下,∠A>∠B,那么直接减;反过来就反着减然后取负数。
问题就在于比较大小这里,我的角度为了提高精度并方便运算,储存方式是bool isNegative; int D; int M; double S。而且可以储存例如123°23333′323.09189″这种奇葩值。
这样比较起来就很麻烦了,要先将其分和秒都规范到60以内,然后再比较。这个还好,我已经写了怎么的程序来处理这个问题了。
但是,我们都知道,double在运算时具有精度问题,那么有没有可能本来是∠A=1°2′62.9999998″,∠B∠A=1°2′63″,∠A<∠B在处理了之后,最后一个double出现精度错误,直接变成∠A=1°3′3.0000000000000002″,∠A=1°3′3.0000000000000001″?这样就很讨厌了。我是真的搞不明白为什么包括Csharp在内的各种编程语言,都要给小数带一个这么烦人的精度问题,搞得我算法都不能好好写