2013-05-13 2 views
0

Я начинаю программировать на C++, и мне поручена реализация математической арифметики с фиксированной точкой в ​​C++. здесь я пытаюсь реализовать функцию isnan(), которая возвращает true, если число is not-a-number else вернет false.реализация функции isnan()

Тестовый файл

#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

Seymouroh да @ Mike, 'isnan' функция будет принимать аргумент и возвращать 1 или 0 в зависимости от того он нан или нет. так что для этого сначала мне нужно определить нан? – Dr7

+0

Да, вам нужно определить значение для представления 'nan'. Кстати, я удалил свой комментарий, когда я расширил его до ответа. –

ответ

0

Я пытаюсь реализовать функцию isnan(), которая возвращает true, если число is not-a-else 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); 
+0

Спасибо за ответ, я сомневаюсь, вызывая 'bool nan = fixed_point :: isnan (a + b);' будет вызывать какую функцию? можете ли вы объяснить немного больше, как кодекс потоков, когда 'bool nan = fixed_point :: isnan (a + b);' вызывается? – Dr7

+0

@ Dr7: Сначала он будет вызывать 'operator +' для выполнения добавления; то он будет вызывать 'isnan', чтобы проверить, является ли результат числом. –

+0

Большое спасибо :) – Dr7

Смежные вопросы