回答受付が終了しました

プログラムで判別式を使わずに実数か、出ないかの判別をしたいのですが実数である条件として値の二乗が正であるというのは妥当でしょうか?

1人が共感しています

回答(5件)

0

>実数である条件として値の二乗が正であるというのは妥当でしょうか? 値が0 の場合が漏れてます 実数ですか? YES or NO ? と言う問題なら、数の範囲として 複素数 の世界 を考えていることになります 実数と純虚数を一つの枠組みで扱うには複素数の範囲が必要です プログラムはさておきまず数学で考えると 複素数とは、 a + bi と置くことが出来る数全体の事 (ここで i は虚数単位 a,b は実数) 分類は下記4種 a = 0 , b = 0 : 0 (実数の一つ) a ≠ 0 , b = 0 :実数 a = 0 , b ≠ 0 :純虚数 a ≠ 0 , b ≠ 0 :(いわゆる)複素数 a ≠ 0 , b ≠ 0 の場合は、2乗すると a^2 + 2abi - b^2 で 虚数成分 2abi が残ります 虚数成分を持つ数は、大小判定は出来ない事になっているで、2乗した値について正負を決められません それぞれ2乗した結果は a = 0 , b = 0 :0 なので 正でも負でもない a ≠ 0 , b = 0 :正である a = 0 , b ≠ 0 :負である a ≠ 0 , b ≠ 0 :正でも負でもない 複素数 2乗したら 正 だった → 元は実数です 2乗したら 0 だった → 元は0で、0も実数です では、コンピュータではどう扱うか? i をコンピュータで直接扱う事は出来ません 数 z を複素数とする、という言い方は出来るし complex型の変数 z を宣言する事も出来ます しかし、複素数は2元数であり、値を扱う為には2個の実数変数を要します 実装方法は2種 ・ガウス平面で表わす:z = a + bi とする、a,b は実数 ・極形式で表わす: z = r(cosθ + i sinθ) とする、r は絶対値(実数) θは偏角(実数) ガウス平面で表わすなら → b == 0 で判定したほうが楽 極形式で表わすなら → sinθ == 0 となるθで判定したほうが楽

0

答えを先に書くと… 『いいえ、無条件に「実数」と決め付けるのが妥当です。』 になります。以下、解説。 まずは「虚数をどう表現するか?」を考えてみましょう。それを考案し、実装できたなら、「判定の方法」も自ずと決まることでしょう。 ただ、一般的な「プログラミング言語を使う」という前提で「与えられた『値』を実数か否か判定する」というのなら、そもそもの話として「なんらかの値が与えられた時点で、その値は実数に決まっている」のです。 実数ではない値をCPUは保持できません。iが虚数である式「i^2=-1」を文字列や画像として表現できても、「2乗したら-1になる値を変数i(≒メモリ)に収納する」などということは不可能なのですから。 ただ。 仮に「この変数に収納するのは『ある値を二乗したときの値』」と決めたとしましょう。C++を使うならばそういうクラスを定義してもいい。そしてそれに負数を代入すれば「虚数」の表現は一応可能になるでしょう。 しかし、それでも、「判別式を使わずに収納されている値が負数かどうかを判別する」のは不可能です。 判別式(あるいは何らかの演算と置き換えてもいい)を実行せずに何かしらの判断を行うことが可能なのは「データを移動(ロード/ストア)するだけでフラグが変化するCPU」上において機械語を用いた時くらいです。 それならばCPUによっては「ゼロか否か」「負数か否か」くらいは判別できます。 以上のことから総合して、あなたが「虚数の表現が可能なプログラミング言語/手法」を開発し、その言語に「CPUのフラグの状態によって実行する/しないが決まる条件分岐文」が実装されていて、「データを移動(ロード/ムーブ)するだけでキャリーフラグが変化するCPU」上で実行した場合を除き、『コンピュータ上においては、すべての値は実数である』と定義して差し支えない、という判断になります。

1

2次方程式の話をしていますか? 仮にそうだとして、2次方程式の解について、判別式を使わず、実数解を持つかどうかを判別したいということですか? 仮にそうだとして、与えられるものは、2次方程式の係数ですか? 仮にそうだとして、それはどのような形式で与えられますか? 圧倒的に情報が足りません。 ちなみに、ある複素数 x について、x が実数である条件として値の2乗が正というのは、妥当ではないです。 x が実数または純虚数、といった仮定があれば別ですが。

1人がナイス!しています

0

妥当です。実数をxとすればx^2≥0となりますからね。

0

実数、整数、自然数を二乗すれば全て正の値になります。 それに、正負を判別するのに判別式が必要になります。

実数か実数でないかを表したいだけなので虚数は二乗しても負になることを利用して二乗して正か負かのプログラムを組みたいのですが大丈夫ですか?という質問です…