
0除算とは例えば10を0で割ったら結果が無限大になるように、ある数を0で割った時に起こる現象です。
しばしばこの0除算に悩まされるので、ある式を代入したらそれが0除算であるかどうかを判定できたらと思いました。
そこで下のような関数を作れたらと思っているのですが、
ある式を見てその結果が0除算であるかを判定する方法はありますでしょうか?
int isDivide0( float val )
{
if ( val == 0除算 )
return 1;
else
return 0;
}
int main()
{
isDivide0( 10 / 0 );
}
尚、開発環境はVisual Studio2005です。
No.2ベストアンサー
- 回答日時:
C++でよければ、
class divide_by_zero : public std::domain_error { ... };
template <typename T>
class arithmetic
{
T value_;
public:
...
template <typename U>
T operator/(U rhs) const
{
if (rhs == U(0)) throw divide_by_zero();
return value_ / rhs;
}
...
};
のようにするのが一番確実です。
すでに除算(または剰余算)が行われた後だと、未定義の動作になってしまうので一般的な対策は困難です。
VC++に限れば、無限大かどうかを判断する方法もありますが、それがゼロ除算によるものなのか、オーバーフローの結果やHUGE_VALによるものなのか判断がつきません。
No.1
- 回答日時:
Visual Studioでやったことはないので確定的な発言はできないのですが、0除算って言語仕様としては「無限」ではなく「不定」なので禁止事項なので、上記のプログラミングですとコンパイルの時点(オプションレベルにもよりますが)で0除算のエラーが出るかと思います。
仮に実行できたとしても例外が発生しメモリの内容を壊してしまいます。
回避策としては、
int isDevide0(float val)
{
if(val==0) {
return TRUE;
} else {
return FALSE;
}
}
int main()
{
int ret_sts;
val1 = 10; /* 割る数 */
val2 = 0; /* 割られる数 */
ret_sts = isDevide0( val2 ):
return ret_sts;
}
とすることで例外を発生させる問題は回避できると思います。
実際の計算や値などは適宜追加してみてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# プログラミングのペーパーテスト 実行結果を表示せよ #include <stdio.h> int h 1 2022/07/09 15:27
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- C言語・C++・C# C言語: ポインタ 5 2022/06/01 08:33
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Java java 引数 戻り値のあるメソッド 3 2023/02/12 06:23
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミングについて。 1つ...
-
gccを行ってもexeファイルが生...
-
c言語
-
visual studio 2022でのC#プロ...
-
C# DatagridviewにExcelシート...
-
mallocについて
-
C言語って古いですか?
-
C言語関数違いについて。
-
逆コンパイルと逆アセンブルの...
-
プログラムの実行時に'<'でリダ...
-
パソコン
-
CPUが16bitでも32bitOSでコンパ...
-
Python、プログラミングについ...
-
だれがとけるの?
-
バッチファイルで以下のような...
-
Notepad++の関数リスト表示の変...
-
VisualStudio2022でC言語プログ...
-
License='MIT' ってなんでmitな...
-
C言語 ストリームについて。
-
c言語でイベントフラグを使った...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語
-
gccを行ってもexeファイルが生...
-
大量のデータを読み込んで表示...
-
visual studio 2022でのC#プロ...
-
C++でデスクトップGUIアプリ開...
-
【C言語】全角文字の配列を、全...
-
Windows Formアプリからコンソ...
-
VisualStudio2022でC言語プログ...
-
C#でログファイルにファイルパ...
-
C#でTreeViewのCheckBoxのサイ...
-
c#のTLS1.2での通信について
-
VisualStudioでC++クラスを追加...
-
C言語について。
-
int16_t の _t は何?
-
プログラマー達は何故、プログ...
-
逆コンパイルと逆アセンブルの...
-
C言語の関数のextern宣言
-
c言語でイベントフラグを使った...
-
C言語 関数、変数の宣言について
-
[C言語]fputsとfprintfの違い
おすすめ情報