トピック
NeG TEAMNEG

整数と実数の乗算について

こんにちは。初めて質問します。 現在シューティングゲームを作成しています。 方向弾を作成する関数を実装しようとしているのですが、cos関数で取得した実数に引数である整数を乗算したところ、小数点以下が切り捨てられます。(sin関数も同様) 原因として考えられるのは、内部で整数と整数の乗算として扱われているからだと思うのですが、プチコンに明示的な型変換の方法はありますか? それとも大人しく整数ではなく、実数を渡した方がいいのでしょうか?
3そうだね
プレイ済み
返信[1]
親投稿
Godot orz_127
他言語でも割りと「実数で」が常套手段だったり。
2そうだね
プレイ済み
返信[2]
親投稿
みむ*mim hidemimtp
勘違いだったらすみません。 ?COS(1) ?COS(1)*2 ?POW(COS(1),2) はすべて整数にはならないですが、具体的にどういう式でしょうか?
1そうだね
プレイ済み
返信[3]
親投稿
ほしけん Hosiken
こちらではそうならないです。 (DEFINTかと思ったけど関係無かった) コードを見せていただくことはできますか?
1そうだね
プレイ済み
返信[4]
親投稿
NeG TEAMNEG
スクショはネット環境ないのでごめんなさい スマホで書き込んでます 具体的には ※わかりやすいように関数と変数の名前を同じにしてます。そのままでは動きません atan = ATAN(y,x) `ラジアン値を取得 cos = COS(atan) `コサイン値を取得 この時点でcosには[-1~1]の実数が入ります このcosの値をx軸の移動に使用したい 複数に渡ります
1そうだね
プレイ済み
返信[5]
親投稿
NeG TEAMNEG
次に整数を乗算します 例:value = 2 × cos 例ではcos が 0.5未満の時 valueには1未満が入りますが 小数点以下が切り捨てられて 結果valueの値は0になり 横方向の移動ができなくなります 実際には関数の引数を使用しているので 渡すときに内部で実数になって 2 = 2.0 だと思っていたのですが・・・
1そうだね
プレイ済み
返信[6]
親投稿
NeG TEAMNEG
追記 期待しているのは 最終的に実数を取得したい
1そうだね
プレイ済み
返信[7]
親投稿
ほしけん Hosiken
説明通りのコードですが実数が返りました。 OPTION DEFINTは使ってないですよね? 関連する変数に#をつけて実数型にするとどうなりますか。
1そうだね
プレイ済み
返信[8]
親投稿
プチコンの場合、引き数の型は、実行時に呼び出し元の引き数の型が引き継がれます。戻りの型は、呼び元に戻って戻り変数に代入するときに型変換が行われるようです。 DEF FN A,X OUT B,Y B=A*2 Y=X*1.5 PRINT "A=";A PRINT "B=";B PRINT "X=";X PRINT "Y=";Y END A#=1.9 X%=3 PRINT "A#=";A# PRINT "X%=";X% FN A#,X% OUT B%,Y% PRINT "B%=";B% PRINT "Y%=";Y%
1そうだね
プレイ済み
返信[9]
親投稿
NeG TEAMNEG
原因がわかりました。 引数の扱いに原因があったみたいです。 CALL "DEBUG",18,180,3 out j DEF DEBUG x,y,ac OUT j VAR i i = ATAN(y,x) ac = i × ac j = ac END 上記の様に 引数のacを計算式の結果を格納する変数としても利用していた結果、渡された3(整数)の値に引きずられて整数として扱われていたと思われます。
2そうだね
プレイ済み
返信[10]
親投稿
NeG TEAMNEG
回答された皆さんありがとうございました。 ほしけんさん何度もありがとうございました。 コータさん的確な指摘ありがとうございました。
2そうだね
プレイ済み