0

私は C++ プログラミングの初心者で、C++ で固定小数点演算を実装するタスクを与えられています。ここでは、数値が非数値の場合に true を返す関数 isnan() を実装しようとしています。それ以外の場合は false を返します。

テストファイル

#include "fixed_point_header.h"
int main()
{
fp::fixed_point<long long int, 63> a=fp::fixed_point<long long int, 63>::positive_infinity(); // will assign positive infinity value to a from an function from header 
fp::fixed_point<long long int, 63> b=fp::fixed_point<long long int, 63>::negative_infinity(); // will assign positive infinity value to b from an function from header 
float nan=fp::fixed_point<long long int, 63>::isnan(a,b);
printf( "fixed point nan value  == %f\n", float (nan));
} 

ヘッダーで、以下に示すコードのように、正と負の無限値が追加された場合、isnan 関数は 1 を返し、それ以外の場合は 0 を返します。

ヘッダーファイル

#include fixed_point_header
static fp::fixed_point<FP, I, F> isnan (fp::fixed_point<FP, I, F> x,fp::fixed_point<FP, I, F> y){
/*if ( x + y ) happens, ie. x and y are infinities
      {
 should return 1; }
       else {
 should return 0; }
      } */

誰でもそれを進める方法を教えてもらえますか? またはこのパラダイムを解決する方法

4

1 に答える 1

0

数値が非数値の場合に true を返す関数 isnan() を実装しようとしています。それ以外の場合は false を返します。

それはとても簡単です。(無限大の場合と同様に)表す予約値を定義しnan、それと比較します。

bool isnan(fixed_point x) {
    return x == fixed_point::nan();
}

正と負の無限大値が追加された場合、以下に示すコードのようにしたいのですが、 isnan 関数は 1 を返す必要がありますそれ以外の場合は 0

nan入力をチェックし、適切な場合は返すのは加算演算子の責任です。

fixed_point operator+(fixed_point x, fixed_point y) {
    if (x == fixed_point::nan() || y == fixed_point::nan()) {
        return nan;
    }
    if (x == fixed_point::positive_infinity()) {
        return y == fixed_point::negative_infinity() ? fixed_point::nan() : x;
    }
    // and so on
}

のテストは次のようにmainなります。

bool nan = fixed_point::isnan(a+b);
于 2013-05-13T13:39:15.693 に答える