フロートとダブルスはNaNに
のNaNでない=ことができます数。あなたはこれを読むことをお勧めします
:How to use nan and inf in C?
https://en.wikipedia.org/wiki/NaN
セットにerrno
すべての機能はそうはNaNを常に使用することができない、浮動小数点値を返すわけではありません。
いくつかの数学関数は、それらの型の任意の数を返すことができるため、エラーが発生したことを示す戻り値を実際に使用することはできません。
まだ設定できませんセットerrno
です。 errno
の古い値が上書きされるという副作用があります。 example.hで
:はexample.cで
#include <errno.h>
/* extern int errno; */
double division(double n, double d);
:main.cの中
#include "example.h"
double division(double n, double d)
{
if (0 == d)
{
errno = EDOM;
return 0.0; /* Does not matter. */
}
else
return n/d;
}
:
エラーフラグ
それともを設定
#include <stdio.h>
#include "example.h"
int main(int argc, char *argv[])
{
division(1.0, 0.0);
if (EDOM == errno)
{
fprintf(stderr, "Couldn't divide 1.0 by 0.0\n");
errno = 0; /* Reset so it won't appear that the error has
occurred even when it hasn't. */
}
division(3.14, 2.78);
if (EDOM == errno)
{
fprintf(stderr, "Couldn't divide 3.14 by 2.78.\n");
errno = 0;
}
return 0;
}
あなた自身のグローバル変数を使用することができますエラーが発生していない場合は設定解除しないでください。
これにより、これらの関数を一括して呼び出すことができ、エラーを1回だけチェックすることができます。 example.hで
:
はexample.cで
int error_flag = 0; /* Set to non-zero value on error. */
double division(double n, double d);
:
main.cの中
#include "example.h"
double division(double n, double d)
{
if (0 == d)
{
error_flag = 1;
return 0.0;
} else
return n/d;
}
:
#include <stdio.h>
#include "example.h"
int main(int argc, char *argv[])
{
double x;
error_flag = 0; /* External variable */
x = division(division(3.14, 1.3 - division(3.9, -3.0)), 7);
if (error_flag)
{
/* The last call to division() didn't unset error_flag. */
fprintf(stderr, "Something went wrong.\n");
return 1;
}
/* Not reached. */
printf("%f\n", x);
return 0;
}
数学ドメインエラーの発生を防ぐことができ
時々。
または、数式エラーを処理するために何もしないでください。 ファイルを開こうとすると、ファイル名だけでは十分ではないことが分かっているため、結果を予測することは困難です。ファイルが存在するかどうかをチェックする必要があります。存在する場合は、アクセス許可をチェックする必要があります。 数学(私が知っているように)はそれほど難しくありません、あなたは引数を知る必要があります。 f(x)= 1/x`を考えてみましょう: `f`への呼び出しが失敗するかどうかを判断するために` x`の値を知る必要があります。このよく知られている関数は ` x!= 0 'となる。 ワンライナー: `二重分割(二重N、ダブルD){N/D返す;}`
(それについて自身が間違って証明した例:f(a, b) = 1/(a+b)
。)
CまたはC++?彼らはこれにアプローチする方法が異なります。 – NathanOliver
両方------------- – Katianie
あなたの関数が行う可能性のあるエラーの例を挙げてください。 – AnDrOiD