無題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
@とんぷぅ~

無題

#1

投稿記事 by @とんぷぅ~ » 18年前

こんにちは。分からないことがあったので質問させて下さい。

実数型と実数型の計算で、計算結果を整数型で表示することは可能でしょうか?
また、可能だとしたらどのようにすればよいでしょうか?

例えば-2147483647 + 1(オペランドは両方実数型)= -2147483646(整数型で表示)
にしたいです。よろしくお願いします。

@とんぷぅ~

実数型と整数型について

#2

投稿記事 by @とんぷぅ~ » 18年前

すみません。タイトルを入れ忘れました。

box

Re:無題

#3

投稿記事 by box » 18年前

> 実数型と実数型の計算で、計算結果を整数型で表示することは可能でしょうか?

演算結果をint型の変数に格納して出力したり、
int型の変数に格納しなくても、出力時にint型にキャストしたりすればよいです。

ただし、実数(浮動小数点数)の方が整数よりも扱える値の範囲が広いので、
演算結果がint型で扱える範囲に収まらない場合があります。あらかじめ注意が必要です。

@とんぷぅ~

Re:無題

#4

投稿記事 by @とんぷぅ~ » 18年前

boxさん。お世話になっております。

早速やってみます。ありがとうございました。

@とんぷぅ~

Re:無題

#5

投稿記事 by @とんぷぅ~ » 18年前

boxさん。出来ました。ありがとうございました。

int lop;     // 左のオペランドに入力する値
int rop; // 右のオペランドに入力する
long mod; // 除算の余り
int max = INT_MAX; // 表現可能な最大値
int min = INT_MIN; // 表現可能な最小値
long long result; // 計算結果を格納

char *check; // 変換不可能な文字を格納
char op; // 入力する演算子

case '/' :
if ( rop == 0 ) {
printf ( "error : division error\n" );
exit ( -1 );
}

// 除算のオーバーフローを考慮
if ( ( lop == min ) && ( rop == -1 ) ) {
printf ( "error : over_flow!!\n" );
exit ( 0 );
}
result = (long long)lop % (long long)rop;

// 割り算の結果として余りが出なかった場合
if ( result == 0 ) {
result = (long long)lop / (long long)rop;
printf ( "%d %c %d = %d", lop, op, rop, result );
exit ( 0 );

// 割り算の結果として余りが出た場合
} else if ( result != 0 ) {
result = (long long)lop / (long long)rop;
mod = (long long)lop % (long long)rop;
printf ( "%d %c %d = %d余り%d", lop, op, rop, result, mod );
exit ( 0 );
}
以前も質問させていただいたのですが、除算で余りがないときは商だけを表示して
余りがあるときは商と余りを表示したいです(5 / 1= 5)(5 / 2= 2余り1)という
感じです。それが余りがある場合全て余りが0になってしまいます。
どうすればよいのでしょうか?long longの使い方が違うのでしょうか?

見にくいかと思いますが、よろしくお願いします。

@とんぷぅ~

Re:無題

#6

投稿記事 by @とんぷぅ~ » 18年前

すみません。除算用にint型で宣言した物を使用したら出来ました。
long long型で出来るのかは分からないので、知ってらっしゃる方
がいましたら、よろしくお願いします。

box

Re:無題

#7

投稿記事 by box » 18年前

> 			result = (long long)lop % (long long)rop;
> 				mod    = (long long)lop % (long long)rop;
変数の意味合いを統一する方がよいです。
割り算の商をresultに、余りをmodに格納するのでは?

全体としてキャストのオンパレードになっていますが、
そうするくらいなら初めから型を統一しておけばよいのではないでしょうか。

また、long long型の書式文字列は%dでよいのでしょうか。

@とんぷぅ~

Re:無題

#8

投稿記事 by @とんぷぅ~ » 18年前

boxさんありがとうございました。

<<割り算の商をresultに、余りをmodに格納するのでは?
はい。その通りです。無駄な処理をしていました。

<<全体としてキャストのオンパレードになっていますが...
確かに無駄の極みでした(笑)

<<また、long long型の書式文字列は%dでよいのでしょうか。
ご指摘ありがとうございます。%lldでした。失礼しました。

boxさんのおかげで解決できました。ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る