コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
さすらいの名無し ◆LWMA5UzCJb3e
2019/12/5 15:20
質問
整数型と実数型の違いは?&謎の記号
整数型と実数型とかありますが、どう違うんですか?型が違うとエラーが出たりするんですか?

例えば
A%=1.00
B=1
C=A%+B
みたいなことはできますか?

逆に
A=1.2345
B%=A
のようなことはできますか?

また、式(?)の中で"<<"とか">>"とかいう記号をよく見るんですけど、ヘルプ(IFの)見てもよくわかりません。
"<"とか">"とかなら分かるんですけどどう違うんですか?

コメント

アバター
さすらいの名無し 2019/12/5 15:23 ◆LWMA5UzCJb3e
投稿した後にこんがらがったんですが、
%が付いたやつか付いてないやつかどっちが実数型でしたっけ…?
アバター
さすらいの名無し 2019/12/5 15:25 ◆LWMA5UzCJb3e
上のやつは%が実数型として書いてるけど、下は逆になってますね…。いろいろとおかしい()
アバター
さすらいの名無し 2019/12/5 15:27 ◆LWMA5UzCJb3e
要するに、上の方は実数型のものと整数型のものを足し算できるか、下の方は実数型の値を整数型に代入できるかと言うことです。

(これ書いてるときもこんがらがってますが、実数型が小数点ある方ですよね?)
アバター
あまさとしおん 2019/12/5 15:57 ◆mzDKTVUAtwqE
プチコン4ですか?
アバター
うつりきまぐれ 2019/12/5 17:51 ◆8rpaj7TJiZUt
プチコン3号では実数型の変数に整数を代入したり、逆に整数型の変数に実数を代入したりすることはエラーにはなりません
前者は実数型にもともと小数点以下がない整数を代入するので欠落する情報はありませんが、後者の整数型の変数に実数を代入する場合は小数点以下は切り捨てられることになります。

@
A=1.2345
B%=A

とした場合 B% は 1 です ( ただしプログラムのどこかに OPTION STRICT が記述されているときは A も 1 だったと思います。当方 3DS が使用できる状態になく未検証 )

プチコン3号の変数の型は変数名の最後につく記号 ( 型サフィックス。% # $ ) で確定するのでこのように型にあわせて変換されることになるのです。
文字列と数値 ( 実数・整数 ) の間では変換できないのでエラーになります。

A
A$=3
B="FOO"

は両方エラーです。

ここからプチコン4の話になります。プチコン4では変数の型が途中で変わることがあります。というのも変数に値が代入されると、その値の型にあわせて変数の型も変わります。なのでそもそも変数の型にあわせて変換というのがありません。
また型サフィックスは互換性のためにつけられるようになっていますが配列変数ではない普通の変数ではいちばんはじめの初期値がサフィックスによって 0 か 0.0 か "" で変わるだけです。つまり

B
A%=1.2345

この場合プチコン3号では整数型にあわせて切り捨てられるので A% が 1 になりますがプチコン4では A% そのものが実数型になっています。プチコン4では A のプログラムもエラーにならずそれぞれ A$ は整数型になり B は文字列型になります。

質問のプログラムはエラーにならず実行できます。プチコン3号か4かでも挙動が異なる?と思うので自身でも試してみてください。

あと意図的に実数を整数に切り下げたり切り上げたり四捨五入したいときは FLOOR() CEIL() ROUND() などを用いてください。

説明がわかりづらく申し訳ないですがわからなくなったらまた聞いてもらえると嬉しいです。

追記: 整数型が % 実数型が # 文字列型が $ です
アバター
Na 2019/12/5 18:56 ◆QoELVrBXBQCI
<<と>>はシフト演算子です。
ビット演算の一種なので、もしビット演算をまだ知らないなら初心者講座のビット演算のページもご覧ください。
http://wiki.hosiken.jp/petc3gou/?Beginner%2FChapter11

A>>Bと書くとAを2進数で表したものを右にB桁ずらした値(2でB回割って余りを切り捨てる)になります。
例えば23>>2は2進数で10111を2桁ずらして101、10進数で5になります。
同様にA<<Bは左にB桁ずらします。(2をB回掛ける)
アバター
こういち 2019/12/5 19:18 ◆ou0jbJnEJ0Kb
型が違うとエラーになることはないですが、整数型にはいくつかメリットがあります。
・メモリの消費が少ない。
実数型の変数は8バイトものメモリを消費するのに対して、整数型は4バイトと半分で済みます。巨大な実数型の配列でOut of memoryが出た場合、特に小数を使わないのであれば、整数型にすると解決することがあります。
配列をDATファイルとして保存する場合も、整数型で保存するとファイルサイズがおよそ半分になります。

・高速
ほとんど差はないですが、一般的に整数型の方が計算が高速だと言われています。(プチコンの場合どうかは分かりませんが)
また、ビットシフトなどもそうですが、多くのプログラミング言語にはビット演算と呼ばれる整数専用の計算が存在します。プチコンの場合はビット演算に実数を使ってもエラーにはなりませんが、速度が大きく落ちます。

・誤差がない
実数型は、色々な要因で誤差が生まれることがありますが、整数だとその心配はありません。(もちろんその代わりに整数しか使えなくなります)
実数型は、整数型よりもずっと大きな数を扱えますが、ある程度の大きさになると精度が落ちるので罠。
アバター
さすらいの名無し 2019/12/8 10:25 ◆LWMA5UzCJb3e
返信遅れてすみません。

あまさとしおんさん>>3号です。

うつりきまぐれさん>>なるほど、3号と4で違うんですね。

Naさん>>どういう時に使いますか?

こういちさん>>逆にデメリットはありますか?
アバター
Na 2019/12/8 11:06 ◆QoELVrBXBQCI
シフト演算子は私の場合は2進数でフラグを管理するときに 1<<n の形でたまに使うぐらいです。
あとは2進数関係の命令と相性がいいかな(RGB、SPCHRのアトリビュート、BGPUTとか?)
そんなによく見る記号ですか?

整数型のデメリットは整数しか使えないことと、±約20億の範囲外の値は使えないことですかね。
アバター
さすらいの名無し 2019/12/16 8:54 ◆LWMA5UzCJb3e
よく見るというよりおもちつきでたまに見ます(矛盾してますがすみません)

ありがとうございます。

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -