マクロのべき乗計算についてNo.14013
kayotantan さん 03/02/08 02:41
 
初めて投稿させていただきます。

マクロでべき乗計算をしようとしたら
正しい結果が得られませんでした。

2の3乗の場合
#beki=2^3;

とした場合、結果が8となるはずが1になってしまいました。
式はCと同じだと思うのですがどうでしょうか?

[ ]
RE:14013 マクロのべき乗計算についてNo.14014
きいろいまふらあ さん 03/02/08 06:02
 
>2の3乗の場合
>#beki=2^3;
>
>とした場合、結果が8となるはずが1になってしまいました。

「^」はべき乗ではなくビット毎のXOR(排他的論理和)です…よね?

2^0=0010^0000=0010=2
2^1=0010^0001=0011=3
2^2=0010^0010=0000=0
2^3=0010^0011=0001=1
2^4=0010^0100=0110=6
2^5=0010^0101=0111=7
2^6=0010^0110=0100=4
2^7=0010^0111=0101=5
2^8=0010^1000=1010=10

ってなことになっています。
#最近のCは知りません。昔のも知らないけど。:-p

[ ]
RE:14014 マクロのべき乗計算についてNo.14015
tnobu2 さん 03/02/08 11:50
 
>>2の3乗の場合
>>#beki=2^3;
>>
>>とした場合、結果が8となるはずが1になってしまいました。
>
>「^」はべき乗ではなくビット毎のXOR(排他的論理和)です…よね?

>ってなことになっています。
>#最近のCは知りません。昔のも知らないけど。:-p

「^」がべき乗なのはBASIC言語なんかがそうですね。

個々の演算子についての説明がヘルプには無いので、BASICなど別の言語
から入った人は勘違いしやすいんではないでしょうか。

[ ]
RE:14015 マクロのべき乗計算についてNo.14016
tnobu2 さん 03/02/08 12:09
 
>「^」がべき乗なのはBASIC言語なんかがそうですね。
>
>個々の演算子についての説明がヘルプには無いので、BASICなど別の言語
>から入った人は勘違いしやすいんではないでしょうか。

ちなみにC言語のべき乗はpow()関数です。

[ ]
RE:14015 マクロのべき乗計算についてNo.14017
きいろいまふらあ さん 03/02/08 12:27
 
>個々の演算子についての説明がヘルプには無いので、BASICなど別の言語
>から入った人は勘違いしやすいんではないでしょうか。

これは私も同感です。
個々の演算子に対して詳細な説明とまでわ言わなくとも、せめて「&は何、^は
何」くらいの説明はあった方がいいと思います。>秀丸ヘルプ

[ ]
RE:14017 マクロのべき乗計算についてNo.14018
ひろ さん 03/02/08 13:38
 
 今日は、ひろです。
> 個々の演算子に対して詳細な説明とまでわ言わなくとも、せめて「&は何、^は
> 何」くらいの説明はあった方がいいと思います。>秀丸ヘルプ
 そういえば、ヘルプには、
> それぞれC言語の演算子と共通です。
としかないですね。

 あと本題の冪乗ですが、「浮動小数点数バージョン」
http://hide.maruo.co.jp/software/hmfloat.html
を入手して、「科学技術演算用 DLL」
http://hide.maruo.co.jp/software/bin/hidemath007.lzh
にある DLL 関数 Pow を使えば良いです。

[ ]
RE:14018 マクロのべき乗計算についてNo.14019
ながさわ さん 03/02/08 14:00
 
こんにちは、ながさわです。

> あと本題の冪乗ですが、「浮動小数点数バージョン」
>http://hide.maruo.co.jp/software/hmfloat.html
>を入手して、「科学技術演算用 DLL」
>http://hide.maruo.co.jp/software/bin/hidemath007.lzh
>にある DLL 関数 Pow を使えば良いです。

そこまでせずとも、中学数学の知識がある人なら、そういう演算子がないと判っ
た時点で、整数バージョンでも勝手にサブルーチン関数を作るのでは?

・立方根なんかを取りたい
・逆数(ってか、負のべき乗)を使いたい
・制度の問題とか
などなどが使用者側にあれば、別ですが。

あたかも、現バージョンでは出来ない風に答えるのは違う気が……。

// 引数検証なし
power:
##i = 0;
##ans = 1;
while(##i < ##2){
  ##ans = ##ans * ##1;
  ##i = ##i + 1;
}
return ##ans;

[ ]
RE:14014 マクロのべき乗計算についてNo.14020
きいろいまふらあ さん 03/02/08 14:02
 
いたずらに発言数を増やしてしまって申し訳ありません。
一番肝心なことを書き忘れていました。

>「^」はべき乗ではなくビット毎のXOR(排他的論理和)です…よね?

で、秀丸マクロにべき乗の演算子や関数はありません。
2の3乗なら 2*2*2 と書かなければなりません。

#nの#m乗とか(指数が可変な場合)だと一つの式で処理することはできないので、
例えば

#i=#m;
#x=1;
while(#i){
  #x=#x*#n;
  #i=#i-1;
}
message str(#x);

なんて処理をすることになります。
#それ用の関数を仕込んだDLLを利用するという手もあると思いますけど。

[ ]
RE:14019 マクロのべき乗計算についてNo.14021
ひろ さん 03/02/08 14:32
 
 ながさわさん今日は、ひろです。
> あたかも、現バージョンでは出来ない風に答えるのは違う気が……。
 すいません。例の中に 2^3 とあるのに、べき乗を読んだ時点で実数 (浮動
小数点) を連想していましたm(__)m。

 というわけで、解も含めて全て符号付き 4 バイトの範囲の整数なら、なが
さわさん、きいろいまふらあさんの仰る方法で可能です。

[ ]
RE:14021 マクロのべき乗計算についてNo.14023
kayotantan さん 03/02/08 22:53
 
こんばんは。
皆様、ご返答ありがとうございます。

Cで^はべき乗の演算子ではないんですね。
Cは数ヶ月かじった程度なので勘違いしてました。
べき乗はサブルーチンを作って行うようにしてみます。

[ ]
RE:14017 マクロのべき乗計算についてNo.14036
秀丸担当 さん 03/02/12 18:29
 
>これは私も同感です。
>個々の演算子に対して詳細な説明とまでわ言わなくとも、せめて「&は何、^は
>何」くらいの説明はあった方がいいと思います。>秀丸ヘルプ

次バージョンでマクロヘルプを少しリニューアルする予定です。
それに伴い、そこらへんの説明も書くことにします。

[ ]