-3

我有计算两个斜率并比较它们的代码,如果它们相同,我会得到它们的值。

但是,如果未定义一个斜率,程序就会崩溃。我需要知道它们是否相同,即使它们未定义。我不能使用任何其他负整数或正整数,因为这会在很大程度上弄乱我的代码。

我更喜欢单词值,例如 5/0 = undefined,但不确定我该怎么做。

例如:

#include <iostream>
using namespace std;

int r = 5/0;

int main()
{
    // Instead of crashing, this should tell me this value is undefined somehow.
    cout << r << endl;
    return 0;
} 

如果斜坡完全垂直,我该如何处理?

4

2 回答 2

0

您应该以始终定义的方式(例如角度)来表示坡度。如果您的程序中有另一个步骤由于数学原因未定义结果,您可以引发异常。

同样为了从向量 x,y 获取角度,您应该使用 atan2 http://en.cppreference.com/w/cpp/numeric/math/atan2

 double theta = atan2(y,x) ; // this is always fine

比较由向量 x1,y1 和 x2,y2 定义的两个角度:

double th1 = atan2(y1,x1) 
double th2 = atan2(y1,x1) 

const double mypi=3.141592653589793238463;

double angleDiff = pi - abs(abs(th1 - th2) - pi); 

if(angleDiff*10<=mypi){
    cout << " angles are within 0.1 pi (that is 18 degr) <<endl; 
}

还要记住,在比较浮点值时,除了少数特殊情况外,您不应期望完全匹配。

于 2012-12-25T21:50:02.283 回答
0

我知道这个问题已经很老了,但是当我试图解决一个几乎相同的问题时,我决定发布一个答案。

我建议一种方法是使用空指针来识别未定义的值。在我的情况下,使用角度是非常不准确的,因为我使用的是 gmp(gnu 多精度库),我需要完美的精度来处理从 64 位开始的巨大位大小并不断攀升。

浮点根本不会削减它。

正如我所看到的,您有两种选择,一个标志要与检索斜率分开进行测试,或者在检索斜率后进行测试。我看不到不涉及抛出异常的替代方案

class line {
    bool vertical;
    bignum slope;

    // one method two functions
    bool is_vertical(){return vertical;}
    bignum slope() {return slope}

    //alternative method 
    bignum *slope() {if (vertical) return NULL; else return &slope}
}

大多数代码需要以与任何其他行不同的方式处理垂直线,因此在 if 语句中处理垂直线并不是一项繁重的任务

if ((slope = line.slope())==NULL){//vertical
    // do some vertical stuff 
    cout << "line is vertical";
} else {
    // do some other line stuff with bignum *slope
    cout "slope is " << *slope;
}
于 2016-04-11T07:49:29.120 回答