掲示板


[記事リスト] [返信する] [新着記事] [過去ログ] [ワード検索] [留意事項] [管理用]

記事No 806
タイトル Re: CASTの使い方
投稿日 : 2017/01/28(Sat) 23:50:27
投稿者 n
参照先
Zmanさん

はじめましてnです。

i1=L1-(i2*(long)i3*i4/L2);
のように、先にint型変数をキャストする必要があります。

(long long)(i2*i3*i4/L2)では、
i2*i3を評価した段階でint型のオーバーフローが起こり得ます。
演算結果をあとからlonglongにキャストしても手遅れです。

1. (long)i2*i3*i4
または、
2. i2*(long)i3*i4
のように、int型の変数をlong型へキャストします。

同じ優先順位の演算の評価順序は、処理系依存なので、
2のほうが安全です。


> CCSCコンパイラ(PCM)でキャストを使うときの考え方を教えてください。
>
> int i1,i2,i3,i4;
> long L1,L2;
>
> i1=L1-(i2*i3*i4/L2);
>
> の計算をするとき
> ただし、実際の値としては
> (i2*i3*i4/L2)はlong範囲内
>  L1-(i2*i3*i4/L2)はint範囲内
> になるものとします。
>
> 1. (i2*i3*i4) がlong範囲を超える場合
>   i1=L1-(long long)(i2*i3*i4/L2)
> i2,i3,i4,L2 は (long long)に自動変換されて計算される
>   
> 2. (i2*i3*i4) がlong範囲内の場合
> (i2*i3*i4/L2) においてL2がlongなのでi2,i3,i4はlongに自動変換されて計算されるので
> i1=L1-(i2*i3*i4/L2)
>
> ・・・でよいでしょうか?
> 間違いがありましたら、ご指摘をお願いします。

- 関連一覧ツリー (▼ をクリックするとツリーを一括表示します)


- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)
おなまえ
Eメール
タイトル
メッセージ
参照先
画像UP
暗証キー (英数字で8文字以内)
投稿キー (右画像の数字を入力) 投稿キー


- 投稿記事修正/削除フォーム -
処理 No 暗証キー

- WebForum -