isnan()函数的实现

implementation of isnan() function

本文关键字:实现 函数 isnan      更新时间:2023-10-16

我是一个c++编程的初学者,我被分配了一个用c++实现定点数学运算的任务。这里我试图实现一个函数isnan(),如果数字不是数字,则返回true,否则将返回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  == %fn", 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; }
      } */
谁能告诉我该怎么做?或者如何解决这个范例

我正在尝试实现一个函数isnan(),如果数字不是数字,则返回true,否则将返回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);