プレイ日記
絶対値ってマイナス出るのか 知らんかった
8そうだね
プレイ済み
返信[1]
親投稿
かいしゅう kaikai.jp
・・・マジか(°д°) 何故ユニコードをABSに突っ込んだのか…
1そうだね
プレイ済み
返信[2]
親投稿
ちーたけ hello.world256
>>お二方 ユニコードでも指数でもなく、ABSにかけてもマイナスビットがONのintが帰ってきたからマイナスなのですよん
2そうだね
プレイ済み
返信[3]
親投稿
仕様か不具合かわかりませんが、振る舞いが違いますね。 A#=&H80000000:? ABS(A#) A%=&H80000000:? ABS(A%)
2そうだね
プレイ済み
返信[4]
親投稿
ツララ LongIceSword
ABS関数の中身って引数をNOT演算して+1してるだけなのかも?
1そうだね
プレイ済み
返信[5]
親投稿
おちゃめ ochame_nako
プチコン3号の関数には引数が整数の場合と実数の場合で挙動が異なるものがあります。 例えばSTR$はよく知られていると思います。 このABSも整数型と実数型とで挙動が異なるタイプです。 そもそも負数とは内部でどのように表現されているかというと実数型の場合は符号部1bit、指数部11bit、仮数部52bitで表現されています。 そのため絶対値は符号部分のbitを0にするだけで済みます。 しかし、整数型は、負数は補数で表現されています。 例えば-1は&B11111111111111111111111111111111となるわけです。-1の絶対値は1ですが、1は&B00000000000000000000000000000001です。 絶対値を得るためにはビット反転して1を足すことで可能になります。(これはツララさんが書いているものと同じこと)
1そうだね
プレイ済み
返信[6]
親投稿
おちゃめ ochame_nako
プチコン3号では初期のバージョンでは四則演算でさえ整数型は整数型として処理されていました。 例えば、65536*65536=0となっていました。 しかし、現行バージョンでは演算結果が整数型の範囲を超える値の場合は自動的に実数型として処理するようになっています。 以上のことから推測して実数型と整数型で挙動が異なるのは仕様と考えられるし、ABS(&H1000000)が負数になるのはこの場合のみ整数型の範囲を超える演算結果になるという例外処理が行われてないため不具合と考えられます。
1そうだね
プレイ済み
返信[7]
親投稿
MIKI ifconfig
プチコンの整数には負数フラグはありません。 もし整数が1bitだったら、これは0と-1を表現できます。 &b0=0*-(2^0)=0 &b0=1*-(2^0)=-1 2bitであれば -2,-1,0,1 を表現できます。 &b00=0*-(2^1)+0*2^0=0 &b01=0*-(2^1)+1*2^0=1 &b10=1*-(2^1)+0*2^0=-2 &b11=1*-(2^1)+1*2^0=-1 3bitの場合、そのbit並びを abc とすればそれが表現する数は a*-(2^2)+b*2^1+c*2^0 となります。 32bitの場合、そのbit並びを a31 a30 ... a1 a0 とすれば、それが表現する数は a31*-(2^31)+a30*2^30+...+a1*2^1+a0*2^0 となる。
0そうだね
プレイ済み
返信[8]
親投稿
解説どもです、俺の頭じゃ「だいたいわかった」程度なのがアレだけど(∵) マーク2を久々に引っ張り出して似たようなことしたら -0だった 結果よりも3号とのギャップが大きくてマーク2の打ち込みに苦労した事で驚いた。 全然使ってないもんな、中身も空っぽだし
1そうだね
プレイ済み