プレイ日記
サクヤ cocoapple00
プチコンの勉強中~。 プレイ日記って上限100コメントまでなんですね。知りませんでした。 ってことで、前回のプレイ日記が上限に達したので新しく書きました。 前回の勉強内容をご存知ない方はスルーしてくださいな(。・・。)ノ
3そうだね
プレイ済み
返信[1]
親投稿
サクヤ cocoapple00
みき★さん ごめんなさい、お返事遅れました! 噂通り100で打ち止められてしまったようなので、新しくプレイ日記投稿しました。 こちらで続きお願いします(*^^*) >整数配列は一要素が32bit~。文字列だと16bit~。 なるほど! 整数配列だとbit数が多いので、それだけでメモリーがオーバーしちゃうので、200*100*200は扱えなかったのですね。でも文字列だと16bitなので大丈夫と。 そして、文字コードって奥が深いんですね。取りあえず文字列は16bitと覚えておきます(^^) >例えばmicsaveでは~ マイク関連の命令ですよね。マイクを使う予定がなかったので、まだ覚えていない命令でした! micsaveでは00000000が-128と解釈されるのは、今まで勉強した内容をふまえると、スマブさんがそのように解釈されるようにプチコンを設定?したから、ですか? ーつづくー
0そうだね
プレイ済み
返信[2]
親投稿
サクヤ cocoapple00
>変数の型には、整数型~ えーと、倍精度実数型(デフォルトの型)はどちらに当てはまるのでしょう? 整数型は%付けるやつですよね。今説明書読んだところ「32bit符号あり」と書いてありました! 浮動小数点数と言うのは先日教えていただいた1.23457+11とかですよね? 文字列型はまず違うし、うーん、倍精度実数型がどれに当てはまるのか分かりません……。 >そもそもchr$()は32bit符号付き整数をエラーなく~ えーとすみません、よく分からないです。ので、整理して考えてみます。 プチコンの整数型は32bitなんですよね? で、文字列型は16bit。 そして負の整数とも相互変換したいので、16bit符号付き整数と16bit符号無し整数(文字列型)を相互変換する関数を作っていただいた。 ーつづくー
0そうだね
プレイ済み
返信[3]
親投稿
サクヤ cocoapple00
ーつづきー えっと、「16bit符号付き整数」はどこから現れたのでしょうか? 32bit符号付き整数と16bit符号付き整数は別物ですよね? えーと32bitは16bitより16個そろばんの珠が多いんですよね? と言うことは、32bitから16bitへの変換も必要なはずだから、『16bit符号無し整数に変換するために、32bit符号付き整数を16bit符号無し整数に変換してから、16bit符号無し整数に変換』。 ところが、32bit符号付き整数を16bit符号無し整数に自動的に変換してくれると判明したので、例の関数は不要だった……という理解で合ってますか?
0そうだね
プレイ済み
返信[4]
親投稿
サクヤ cocoapple00
今、試しにCHR$(-1000)で打ってきたら、噂の豆腐記号さんが現れました!(まだバージョンアップしていないので) で、それをASC()で元に戻したら64536が現れました。……あれ? 更に試してみました。 -1だと65535でした。 -2だと65534でした。 うーん、符号無しだと65535(=2^16-1)までの整数を解釈してくれるんですよね? と言うことは、最大値の(2^16-1)で折り返してる? でもそうすると正の整数と負の整数がダブっちゃうから一対一の相互変換にならないので使えませんよね……。 うーん、負の整数の変換の仕方がまだ分からないです……。
0そうだね
プレイ済み
返信[5]
親投稿
サクヤ cocoapple00
あれ、もしかしてこれって例のグラフ(符号付きと符号無し)のですか? &B1000000000000000(最大値) -1は(2^16)-1ですもんね。 すみません、すっぱ抜けてました(汗) ああでも、(2^16-1)まで解釈できると言うことは、(2^16-1)までの正の整数は使えるはずだから、やっぱりここで折り返されると、負の整数は使えない? うーん、やっぱり分からないです。
0そうだね
プレイ済み
返信[6]
親投稿
MIKI ifconfig
> micsaveでは00000000が-128と解釈されるのはスマブさんがそのように そうです。(もしかすると音声出力のハードウェアがそういう仕様なのかもしれません。) >倍精度実数型 プチコンはそう言っているのか!? 「実数」型というと実数のイメージ(連続、無限の桁数)に惑わされるので誤解を招きやすいです。 一般には倍精度浮動小数点数型というと思います。これで表現できる数値は、全く連続してないし、桁数はせいぜい16桁(十進)です。 倍精度と言うからには倍じゃない単精度浮動小数点数型というのがあり、これは 32bit で桁数は 6 桁(十進)くらいです。 プチコンでは単精度は使用できず、整数型でない数値は全て倍精度浮動小数点数になります。 (と思いきや例外があり floor(10) div 3.0 という式は単精度浮動小数点数の精度を持ちます)
0そうだね
プレイ済み
返信[7]
親投稿
MIKI ifconfig
話のついでに、 浮動小数点数の意味は、小数点(.)の位置が、どのbitの間にあるのか決まってない、ふらふら動く、という意味です。 対義語は固定小数点数で、こちらは小数点の位置が決まっています。例えば整数の場合、小数点は常に一番右の桁(bit)の右に固定されてますね。 これについてはまた改めて・・ >「16bit符号付き整数」はどこから 文字は16bitなので、負の数を文字に入れたいと思ったら、16bitで負の数を表す方法を決めなくてはなりません。 私はそれを「16bit符号付き整数」で行おうとしましたが、相互変換の決まりさえ守ればなんでもいいんです。 「0を-32768、32768を0、65535を32767として解釈する」でもいいです。これはmicsaveと似た方法です。
0そうだね
プレイ済み
返信[8]
親投稿
MIKI ifconfig
たくさんの質問を頂きましたが、ややこしいところなのでゆっくり進みますね。その中で分からない事があれば、いつでも質問してください。 あと、変換関数再掲します。 def u2i(u16%) ' 符号なしから符号ありに変換 return ((u16%+32768) and 65535)-32768 end def i2u(i16%) '符号ありから符号なしに変換 retrun i16% and 65535 end 符号ありの整数 k を文字列に入れる場合 a$[i] = chr$(i2u(k)) それを読む場合 k = u2i(asc(a$[i]))
0そうだね
プレイ済み
返信[9]
親投稿
MIKI ifconfig
一文字と32bit符号付き整数では相互変換が可能です。 ただしそれが成立するのは 0 <= 整数 <= 2^16-1 の範囲に限ります。 整数が「16bit符号無し整数で表せる範囲」にあるならば成立。 言い換えれば、「16bit符号無し整数と一文字は相互変換可能」 for i% = -10 to 65545 if i% != asc(chr$(i%)) then ? "error at ";i% next これを実行したら 0から65535 以外だと error と表示されますね。
0そうだね
プレイ済み
返信[10]
親投稿
MIKI ifconfig
再掲した関数を使うと、負の数含む整数と一文字とで相互変換が可能になりました。 ただしそれが成立するのは -2^15 <= 整数 <= 2^15-1 の範囲に限ります。 整数が「16bit符号付き整数で表せる範囲」にあるならば成立。 言い換えれば、「16bit符号付き整数と一文字は相互変換可能」 for i% = -32778 to 32777 if i% != u2i(asc(chr$(i2u(i%)))) then ? "error at ";i% next -32768から32767の範囲で等号が成立します。 相互変換可能な範囲がずれただけで、その個数は相変わらず2^16個です。
0そうだね
プレイ済み
返信[11]
親投稿
サクヤ cocoapple00
>ややこしいところなので~ ありがとうございます! ゆっくり嬉しいです。実は若干混乱しかけてるかもと思いはじめてました(^^;) >倍精度浮動小数点数 今まで倍精度という意味はよく分からなかったので、取りあえずそういう名前が付いているのかとだけ思って使っていました(汗) えーと、倍は一倍二倍…とかの倍ですよね。精度は精密さで、floor()は整数のみ取り出す(小数点切り捨て)。divは割った時の整数値の取得。 単純な割り算ではないのかな?と式の内容がよく分からなかったので、実際に A=FLOOR(10) DIV 3.0 ?A と打ってみたら『3』と戻ってきました。これが単精度浮動小数点数ですか? あ、もしかして倍精度は単精度より精度が倍とかそんな感じですか? ーつづくー
0そうだね
プレイ済み
返信[12]
親投稿
サクヤ cocoapple00
そして一番最初のA%にすると150*50*150がいけたのは、A%(=整数型)が32bitで、A(=倍精度浮動小数点数型)が64bitだったからなのですね。今までは「取りあえず%を付けると軽くなるようだ」としか考えていませんでした(汗) >小数点の位置 ええと、すみません。色々考えていくうちに、実は基本的な定義が曖昧になっていたと改めて気づいたので、物凄く基本的なお話の確認になってしまうのですが、整理するために確認にさせてください。 プチコンの「整数」って数学とかの「整数」と同じ意味だと思っていたのですが、合ってます? そして教えていただいた内容を私なりに整理すると、&B10000とかが二進法で、16とかが10進法。ただしCPUは0001などbitを扱っているだけで、&B10000が16と解釈しているのは人間側。たぶんスマブさんがそのようにプチコンを組んでいる(世界基準) ーつづくー
0そうだね
プレイ済み
返信[13]
親投稿
サクヤ cocoapple00
それでですね、ここで改めてbitと小数点の関係がよく分からなくなってしまいました。 bitで小数点ってどうやって表すのてでしょう? 整数の定義が合っているのなら、一番右の桁(bit)に固定というのは、10進法では『12.34』とかですよね。 2進法でも書き方があるのでしょうか? あ、でも2進数表記ではビット列そのものを表すんですよね? うーん……。 >これについてはまた改めて はい! ーつづくー
0そうだね
プレイ済み
返信[14]
親投稿
サクヤ cocoapple00
>16bit符号付き整数~ もしかして、今まで教えていただいた解釈のお話でしょうか? そして今回の件は『人間側で好きに解釈を決めて、その通りにプログラムが動くようにプログラミングしちゃえばいい』といった感じですか? 「chr$(0)を-32768と定める」でも「chr$(0)を-1000と定める」でも「chr$(0)を0と定める」でもどれでもいい、自分で定めていいということでしょうか? そしてそのような解釈になるプログラム(この場合は関数)を書く、と。 ……あ、「chr$(0)を0と定める」では負にはなりませんね(笑) 途中なのにまた色々と質問を重ねてしまってすみません。みき★さんの予定とずれているようでしたら(現在教えていただいている内容と関係無さそうでしたら)、こちらはまた後ほど教えていただけたら嬉しいです(*^^*)
0そうだね
プレイ済み
返信[15]
親投稿
サクヤ cocoapple00
あああ、すみませんっ! 投稿し終わって確認していたら、投稿時には見えなかったみき★さんの下二つのコメント(「一文字と~」「再掲した関数を使うと~」から始まるコメントです)が間に表示されていました。コメント投稿時に表示されていたのは「たくさんの質問を~」で始まる一つだけでした。うーん、五時間も離れていたんですが……。 どうもミーバースがリニューアル後から表示に若干の不具合というか、ズレが発生しているみたいで。 間に表示されたのは初めてですが……(^^;) その二つのコメントを読まずに今日の分のコメントを投稿してしまったので、ずれたお返事をしてしまっていたらすみませんっ。 そして申し訳ないのですが、今日はもう寝ないとまずいので、そちらはまた明日改めて勉強させていただきますね! 今日のお返事が中途半端なものになってしまってごめんなさいっ。 あ、ちなみに私の今日のお返事投稿数は現状5つです。
0そうだね
プレイ済み
返信[16]
親投稿
サクヤ cocoapple00
8/22から数日留守にするので、お返事そのあとにさせていただきますね。すみません m(. .)m
0そうだね
プレイ済み
返信[17]
親投稿
MIKI ifconfig
>プチコンの「整数」って数学とかの「整数」と同じ意味だと思っていた 符号なし整数についても符号付き整数についても、厳密に数学の「整数」と同じです。 ただし、プチコンの場合は表せる範囲に限りがあるので、あくまでも「表せる範囲において」という但し書きが付きます。 >bitと小数点の関係 bit列を整数として解釈する方法が二つありました。 一つは符号無し整数、もう一つは符号付き整数 それぞれ一番右のbitを一の位として、左へ行くほどに 二の位、四の位、・・・ と位取りします。 十進数では小数点は一の位と小数第一位の間にあります。 符号無し・符号付き整数も同じでして、一の位の右に小数点があると考えます。 符号なし/付きいずれの場合も一の位が常に一番右のbitに固定されているので、小数点も固定されています。 それで固定小数点数といえるわけです。
0そうだね
プレイ済み
返信[18]
親投稿
MIKI ifconfig
> &B10000とかが二進法で、16とかが10進法。ただしCPUは0001などbitを扱っているだけで、&B10000が16と解釈しているのは人間側。 合ってますが、一点だけ、3DS の CPU は ARM という種類なのですが、この CPU は bit 列を「符号なし整数」「符号付き整数」として解釈する機能を持っているんです。そのため、ARM の場合は「10000 というbit列を 16 と解釈している」と言えるでしょう。 CPUにとって必須ではありませんが、整数の加算減算ができるととても便利。てなわけで、実は全ての実用的な CPU は ARM 同様 bit 列を符号無し/符号付整数として扱うことができますし、その加減算もできます。 ARM は整数の加減算にくわえ、乗算もできます。除算はできません。だから割り算をするにはプログラムを書いてやる必要があります。
0そうだね
プレイ済み
返信[19]
親投稿
サクヤ cocoapple00
お返事大変遅れました! ごめんなさいっ。 for i% -10 to 65545 ~~~ next を実際書いて実行してみました。 画像のような結果になりました。 ーつづくー
0そうだね
プレイ済み
返信[20]
親投稿
サクヤ cocoapple00
for i% -32778 to 32777 ~~ next も実行してみました。画像のような結果になりました!エラー出し(?)はこのようにやれば良かったのですね。参考になりました。ありがとうございます(^^) それで質問なのですが、なぜ-2^15から2^15-1の範囲なのでしょうか? 個数が変わらず2^16個というのは分かりました。 >bit列と小数点の関係 >符号無し・符号付きも同じ つまり、bitで小数点を書くと0101.11とかになるのでしょうか? >ARMは除算はできません。 そうなのですか! あれ、でもプチコンでは「/」が使えるはずなので、これもスマブさんがプチコンをそのように動くように設定されているということでしょうか? 余談ですが、ミーバースのアルバムに保存した画像ってコメントの返信には使えないんですね。使えるものかと思ってました(^^;)
0そうだね
プレイ済み
返信[21]
親投稿
MIKI ifconfig
お久しぶりです! > なぜ-2^15から2^15-1の範囲なのでしょうか? 「符号付き整数」の解釈方法 「bit列 abcdefghijklmnop を -2^15*a + 2^14*b + 2^13*c + ... 2^1*o + 2^0*p と解釈する」 に由来します。 ・・・ということではなくて、例えば 「1つずらして -2^15+1から2^15 でもいいんじゃね?」 ってことですか? 除算は、プチコンの中にARM用の除算プログラムが入ってます。 浮動小数点数もARMは直接扱えないのでプチコンのプログラムで処理します。 私もアルバムは新規投稿になるの知らず、泣く泣く大切なスクショ捨てました(泣
0そうだね
プレイ済み
返信[22]
親投稿
MIKI ifconfig
> つまり、bitで小数点を書くと0101.11とかになるのでしょうか? そうです。十進数と同じですね。 小数点から右は 1/2 の位、1/4の位、1/8の位、、、と続きます。 この場合符号無しと解釈すれば 2^3*0 + 2^2*1 + 2^1*0 + 2^0*1 + 2^-1*1 + 2^-2 * 1 = 4+1+0.5+0.25 = 5.75 となります。符号付きと解釈しても -2^3*0 + 以下同文なのでやはり 5.75 になります。
0そうだね
プレイ済み
返信[23]
親投稿
サクヤ cocoapple00
>「1つずらして-2^15+1から2^15でも~ あ、はい。そういう意図の質問でした。分かりづらくてすみません。 >「符号付き整数」の解釈方法 以前ご説明いただいたものですよね。詰め込みすぎて少し記憶が混乱しているみたいなので、あとでもう一度確認してきます! そして、小数点のご説明ありがとうございました!
0そうだね
プレイ済み
返信[24]
親投稿
MIKI ifconfig
> あとでもう一度確認してきます! この「符号なし整数」と「符号付き整数」はかなり難しい部分です。そもそもプチコンには「符号無し整数」とういう概念すらないですから。 私の場合は混乱したらいつも具体例で確認していました。 以前 3bit で符号無し符号付きの説明をしましたけど、 分からなくなったらいつでもあそこに戻るといいかなあと思います。
0そうだね
プレイ済み
返信[25]
親投稿
サクヤ cocoapple00
みき★さん ご、ご無沙汰しておりますっ。 ごめんなさい、お返事がものすごく遅くなってしまって。 実はですね、ミーバースでちょっと嫌なことがありまして精神的にどうしても書き込めない状態でした。それでですね、いっそのことしばらくミーバースから離れようかと思いまして、せめてご挨拶だけはと思い、あがってきました。 教えていただいている途中なのに不義理をしてしまってごめんなさい。プチコンはのんびりプチプチ続けていく予定なので、ここまで教えていただいたことを参考に楽しく作っていけたらと思っています。わかりやすく教えていただけて本当に有難かったです。 ミーバースに戻って来られた時にはご迷惑でなければまた構っていただけましたら嬉しいです。本当にありがとうございました!
0そうだね
プレイ済み
返信[26]
親投稿
MIKI ifconfig
サクヤさん お久しぶりです。 大変な目に遭われたのですね。 わざわざご挨拶頂いてありがとうございます。 不義理とか思ってないので大丈夫ですよ。ゆっくり休養してください。 質問などはいつでもウェルカムです!! また楽しい作品が完成したら公開してくださいね。 こちらこそお付き合いありがとうございました!!
0そうだね
プレイ済み