HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0902
ken実数型変数の宣言14未解決


ken

リンク

2008/9/2(Tue) 16:28:14|NO.18847

実数型変数を宣言したいのですがHSPではできないのでしょうか?(←色々調べた結果です)

例えば
aを実数型変数として宣言
a=1/3
mes a
とした時

0.333333・・・
と表示してほしいのです。
そうすればいちいち計算式の中で実数であることを気にしなくてすむので・・・



この記事に返信する


elfizm

リンク

2008/9/2(Tue) 16:42:44|NO.18848

プログラミング・マニュアルより引用

整数値、実数値、文字列、関数を混在した式を書くことも可能です。 その場合は、計算する最初の項に合わせて、後の項が型変換されます。 たとえば、「8 + 4.5」のような計算は、最初の8(整数)に合わせて4.5は、4(整数)として扱われます。


ですので型の宣言というのが配列変数以外であまり意味を持たないので、
実数の計算をする場合には数字を1.0とか1fにする以外ないように思います・・

こんなのもありかもしれません。

#define eq =1f* a eq 1/3 mes a



かっぺい

リンク

2008/9/2(Tue) 16:44:12|NO.18849

できますよ。double命令を使えば。
a=double(1)
a=a/3
mes a
後でdouble命令についてF1のヘルプで確認してください。



inovia

リンク

2008/9/2(Tue) 16:52:22|NO.18850

うちはこんな感じにやってます。

test=1e+*1/3 mes test



レノス

リンク

2008/9/2(Tue) 16:59:02|NO.18851

ddim すればいいのでは……?



Quiet

リンク

2008/9/2(Tue) 17:02:16|NO.18852


test=1.0 * 1/3
これでいいんじゃないですかね?



レヴィン

リンク

2008/9/2(Tue) 19:38:59|NO.18857

a=1.0f/3.0f

a=double(1/3)
でできると思いますが。



GENKI

リンク

2008/9/2(Tue) 21:32:30|NO.18858

一番重要なことはelfizmさんがおっしゃる通りこの部分。

> 整数値、実数値、文字列、関数を混在した式を書くことも可能です。
> その場合は、計算する最初の項に合わせて、後の項が型変換されます。
> たとえば、「8 + 4.5」のような計算は、最初の8(整数)に合わせて4.5は、4(整数)として扱われます。

要するに式の一番左に来る数字(一番初めに読み始める数字)を実数で書いてやると、その計算式は全て実数で計算されます。
また、逆にそれが整数だった場合は途中に実数が入っていても整数として計算され、結果も整数となります。
文字列も同じです。


> #define eq =1f*
> a eq 1/3

> a=double(1)
> a=a/3

> test=1e+*1/3
> mes test

> test=1.0 * 1/3

> a=1.0f/3.0f

いくつも回答がありますが、以上が正解の例。
elfizmさんのは考える余地やマクロを知るきっかけを残したという意味なのかな…。

ちなみに私の場合
a = 1.0 / 3
mes a
もしくは、
a = double(1.0) / 3
mes a
とやることが多いです。

さらにちなみに、調べても出てきにくいと思いますので。
1f = 1.0
となります。eは調べてくださいね。



> ddim すればいいのでは……?

こうすると言う意味でしょうか?
ddim a,1
a = 1/3 mes a
a = 1/3 実行後は、aは整数型変数に変換されます。


> a=double(1/3)

a=double(1/3)
→a=double(0)
→a=0.0
となります。



.Hrk

リンク

2008/9/2(Tue) 21:45:23|NO.18859

これでいいのでは?

a=1.0/3 mes a
一番左の数値の型に型変換されるので、"1"を実数で"1.0"と書けば計算結果は実数型となります。



GENKI

リンク

2008/9/3(Wed) 00:49:26|NO.18863

>>NO.18858
> もしくは、
> a = double(1.0) / 3
> mes a
> とやることが多いです。

すみません間違えました。
これではわざわざdouble関数使う意味ないですね。
正しくはこうです。
a = double(1) / 3
mes a



ken

リンク

2008/9/3(Wed) 12:32:23|NO.18930

みなさんありがとうございます。

せっかく多くの回答いただきましたが質問の仕方が悪かったのか誤解を招いたようです。
質問の趣旨は変数aを実数型変数として宣言(Dim a As Double のように)して
a=xxxxxx の式の右辺に何を書こうが変数aは実数として計算してほしいということです。

だから例えば通常実数計算では
a=1.0 + 1.0/3 - 3.0*0.5
mes a
と書くところを
Dim a As Double←例です
a=1+1/3-3*0.5
mes a
のように書いて
-1.66666・・・
という答えがほしいということです。
右辺に変数があったとしてもそれが実数かどうかを気にしないで書きたいのです。

elfizmさんのヒント#define ・・・が一番趣旨に近くDim a As Doubleを#defineに置き換えて

#define eq =1f* #define pls +1f* #define mns -1f* a eq 1 pls 1/3 mns 3*0.5 mes a
と書けば一応OKですが=,+,-をeq,pls,mnsに置き換えると式が見にくいです。
Dim a As Doubleのように宣言文を実装してもらえると有り難いのですが他に方法はない
でしょうか?



レノス

リンク

2008/9/3(Wed) 15:44:30|NO.18934

宣言(Dim var As Double)は ddim でできますが、
HSP は VB(AB?) と違って、代入の時に変数の型が式にあわせられるので、
宣言しても意味ないです。


sdim a ; 文字列型に宣言 mes vartype(a) ; str a = 1 mes vartype(a) ; int

仕方なく a = 1.0 + 1.0/3 - 3.0*0.5 と書くか、
便利なマクロをつくるかしかありません。



ANTARES

リンク

2008/9/3(Wed) 21:30:27|NO.18956

>a=xxxxxx の式の右辺に何を書こうが変数aは実数として計算してほしいということです。
質問の仕方が悪いというより、これ、質問じゃないですね。
質問(「実数型変数を宣言したいのですがHSPではできないのでしょうか?」)の
答としては「できません」で終わりです。

>と書けば一応OKですが=,+,-をeq,pls,mnsに置き換えると式が見にくいです。
plsやmnsは不要です。



ken

リンク

2008/9/4(Thu) 12:16:38|NO.19010

レノス さん
最初は自分もddimでできるのではないかと思ったのですがおっしゃるように
>代入の時に変数の型が式にあわせられるので、
ダメでした。
ddimにしろsdim,dimはHSPではどこにも宣言するとは書いてなく配列を確保するになっていますね。

>便利なマクロをつくるかしかありません。
#define eq =1f*
#define pls +1f*
#define mns -1f*
以外に良さそうな方法ありますか?

ANTARES さん
>plsやmnsは不要です。
なぜですか?



ANTARES

リンク

2008/9/5(Fri) 06:43:41|NO.19023

>>plsやmnsは不要です。
>なぜですか?
 失礼しました。
HSP2では、先頭項が文字列の場合、すべての項が文字列に変換されて演算が行なわれ、
先頭項が整数の場合、すべての文字列が整数に変換されて演算が行なわれるように
見えたため、先頭項がfloat型ならすべてfloat型に変換されて演算されると
思ったのですが、違いましたね(^_^;;



ONION software Copyright 1997-2021(c) All rights reserved.