我是c ++编程的初学者,我接受了在c ++中实现定点数学运算的任务。这里我试图实现一个函数isnan(),如果数字不是-a,则返回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 == %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; }
} */
任何人都可以告诉我们如何处理它?或者如何解决这个范例
答案 0 :(得分:0)
我正在尝试实现一个函数isnan(),如果数字不是-a,则返回true,else将返回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);