質問するログイン新規登録
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

6回答

1679閲覧

正負の反転出力ではなく、正負の反転を判断したい

coco_

総合スコア19

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2018/11/08 07:19

0

0

前提・実現したいこと

ある値の正負を反転させるのではなく、反転したかどうかを判断するプログラムを作成したいのですが調べてもまったく出てきません。
調べ方が悪いのかもしれませんが、分かる方いましたら教えてください教えてください。よろしくお願いします。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papinianus

2018/11/08 07:23

もうちょっと具体的にお願いします
shun_kuwa

2018/11/08 07:23

具体的にどういうソースを書いていて、どこが上手くいかないか教えていただけませんか?「反転したかどうかを判断」とのことですが、何によって反転する想定でしょうか?作りたいのはテストプログラムのようなもの?
coco_

2018/11/08 07:49

ソースはまだ書けていません。反転を判断する関数?がそもそも分からないので質問させていただきました。If文を使って関数(f1(x,y)ーf2(x,y))でf1の値が+から-または-から+になったかどうかを判定したいです
torisan

2018/11/09 02:00

反転を判断する、という事は 反転するコードがあるはずですよね。それを記載してください。
fuzzball

2018/11/09 02:06

0の場合はどうするんでしょうか?
guest

回答6

0

ある値の正負を反転させたもとの比較して同じなら反転している、異なるなら反していないでいいのでは?

投稿2018/11/08 07:24

YAmaGNZ

総合スコア10679

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coco_

2018/11/13 08:34

答えていただきありがとうございました。 とても参考になりました。
guest

0

ある数の正負(と0)は、Math.Sign() 関数で 1/0/-1 でとれますから、

C#

1if (Math.Sign(A) != Math.Sign(oldA)) { 2... 3}

でいけるでしょう。
※反転の比較元が oldA にある前提です

投稿2018/11/08 07:35

tacsheaven

総合スコア13707

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coco_

2018/11/13 08:35

答えていただきありがとうございました。 とても参考になりました。
guest

0

Math.Sign(a) * Math.Sign(b) < 0 では?

Math.Sign() は -1, 0, 1 を返します。
a と b の符号が反転していれば、 Math.Sign(a) + Math.Sign(b) は -1 になります。
a, bの両方またはどちらかが 0 なら Math.Sign(a) * Math.Sign(b) は 0 になります。
a と bの符号が同じなら、Math.Sign(a) * Math.Sign(b) は 1 になります。

投稿2018/11/09 20:22

編集2018/11/13 11:54
katoy

総合スコア22328

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coco_

2018/11/13 08:35

答えていただきありがとうございました。 とても参考になりました。
guest

0

あまり良く考えてませんが、数値型一緒だとしたら

C#

1Math.Abs(A) == Math.Abs(B) && A != B

じゃだめ

投稿2018/11/08 07:24

rururu3

総合スコア5545

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coco_

2018/11/13 08:35

答えていただきありがとうございました。 とても参考になりました。
guest

0

ベストアンサー

これは、誤記かと思っているが・・・

関数(f1(x,y)ーf2(x,y))でf1の値が+から-または-から+になったかどうかを判定したいです

本当にこのままの意味だとしたら。
これって、ある関数の結果f1に対して演算(f2の結果を減算)したらf1の符号が変更されるか?
を判断したいっていうことなのですかね。たぶん。

ある関数に対して演算結果しか渡されないのなら、当然判断なんてできないですよ。
せめて、f1の値と、演算方法、演算する値の3つのパラメータ
か、当たり前の前提だとみんな思っている演算前と演算後が必要。

あとは、減算することが決まっているなら、以下のような感じでしょうか。
ソースはrururu3のものを借用

C#

1public bool 関数(f1結果、 f2結果) { 2 return Math.Abs(f1結果) == Math.Abs(f1結果 - f2結果) && f1結果 != (f1結果 - f2結果); 3}

投稿2018/11/08 10:02

momon-ga

総合スコア4828

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

momon-ga

2018/11/09 01:53

あ、判定方法これじゃまずいね。でも、やりたいことがわからなんので放置。
coco_

2018/11/13 08:34

ありがとうございました 参考になりました!
guest

0

反転ではなく正負符号が変わったかどうかを知りたいと読みました。

その場合、フラグを使うより無いと思います。

まずはフラグ f の値を 0 とします。
Math.Sign(f1(x, y)) を計算した結果を s とし、s == f なら符号は変わっていません。それ以外の場合は変わっています。
判定した後は f = s としてフラグを更新します。

投稿2018/11/08 08:30

編集2018/11/08 08:31
Zuishin

総合スコア28675

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coco_

2018/11/13 08:35

答えていただきありがとうございました。 とても参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問