制作日記

こういうの作った方が、逃げにくいじゃない

2012年、個人的に面白かった漫画を挙げてみる

年納めということで、振り返り
今年は12月がかなりの豊作だった気がする

今年発売された所持している単行本の内、面白かったものを20個選択
大まかな順位しかつけられないので、50音順で列挙
雑誌読みで済ましている漫画(週刊誌で連載しているほとんどの漫画)は、選定に含まれない

「CANDY POP NIGHTMARE」 氷川へきる(著)

「IPPO」 えすとえむ(著)

「Latin」 高畠エナガ(著)

「アクア・ピアネタ」 結布(著)

「あやかし古書庫と少女の魅宝」 ドリヤス工場(著)

「夜さん」 佐原ミズ(著)

「宇宙の瓶づめと猫と箱庭」 斉藤由美(著)

「演劇部5分前」 百名哲(著)

「かくかくしかじか」 東村アキコ(著)

「さらば、やさしいゆうづる」 有永イネ(著)

「セントールの悩み」 村山慶(著)

「チオノポリス」 高橋拡那(著)

「地図苔の森」 須藤真澄(著)

「血潜り林檎と金魚鉢男」 阿部洋一(著)

「鉄楽レトラ」 佐原ミズ(著)

「なりひらばし電気商店街」 岩岡ヒサエ(著)

「のれんをくぐりましょ」 竹ノ内ひとみ (著)

「変身のニュース」 宮崎夏次系(著)

「ボールルームへようこそ」 竹内友(著)

「竜のかわいい七つの子」 九井諒子(著)

%s

http://mugenbinran.web.fc2.com/error.html
%sはヌル終端文字列を表示するんだから、 文字列の先頭アドレス指定しないとそら落ちる
文字列でなくても、せめて読み書き可能なアドレスを指定しないと……

てなわけで、C99のJIS規格からfprintf関数の指定子sの説明を引用

長さ修飾子が存在しない場合、実引数は、文字型配列の先頭要素へのポインタでなければならない(236)
配列内の文字を終端ナル文字の直前まで書き込む。精度が指定された場合、精度を超える個数のバイトは書き込まない。精度が指定されない場合又は精度が配列の大きさよりも大きい場合、その配列はナル文字を含まなければならない。
~中略~
(236) 多バイト文字のための特別な対応はない。

ということだそうです。

JIS規格は面白い。
Cがわかるなら、是非読むべき。

http://www.jisc.go.jp/app/pager?%23jps.JPSH0090D:JPSO0020:/JPS/JPSO0090.jsp=&RKKNP_vJISJISNO=X3010

今更だけど

なんでMUGENのバグ解析してるんだろう?

息抜き?

整数での**の計算結果がおかしくなる理由

分かった

問題の処理は記事の最後に載せてる辺り

やりたいことは、多分上から計算していく感じ?

X乗するとして、Xが2以上ならまず2(2進数で10)乗

Xを2進数としたとき上から2桁目が1なら、一番初めの値をかけて3(2進数で11)乗にする

Xが3以下なら終了、それより大きければ計算した値を2乗する

これで2乗していた場合はは4(2進数で100)乗、3乗していた場合は6(110)乗したことになる

Xを2進数としたとき上から3桁目が1なら、
一番初めの値をかけて5(2進数で101)乗、もしくは7(2進数で111)乗にする

Xが7以下なら終了、それより大きければ計算した値を更に2乗する

てな感じ?

で、この一番初めの値をかけるかどうかの判定が間違ってて、
上の桁から判定するべきなのに下の桁から判定していってる

だから、最上位桁以外反転した数で累乗計算してしまうわけだ

標準関数のpow()は遅いから、独自に整数専用の累乗計算の関数作ったんだろうねー
for()で回せばいいのに、下手な小細工しちゃうから……

直せそうなら直そうと思ったけど、シーケンスそのままってのは無理
シーケンス変えるのは怖い、というか出力結果が変わるのが恐ろしい……
**以外で使ってる可能性もあるから、他への影響もわからないし

一応直したけど、上記の理由から動作は保証しない

winmugen.ico


00407CF3 8BC8 MOV ECX,EAX
00407CF5 BD 01000000 MOV EBP,1
00407CFA 0FAFC1 IMUL EAX,ECX
00407CFD 8D4A FF LEA ECX,DWORD PTR DS:[EDX-1]
00407D00 D3E5 SHL EBP,CL
00407D02 85EF TEST EDI,EBP
00407D04 74 03 JE SHORT winmugen.00407D09
00407D06 0FAFC3 IMUL EAX,EBX
00407D09 42 INC EDX
00407D0A BD 01000000 MOV EBP,1
00407D0F 8BCA MOV ECX,EDX
00407D11 D3E5 SHL EBP,CL
00407D13 3BFD CMP EDI,EBP
00407D15 ^7D DC JGE SHORT winmugen.00407CF3

負数判定

某ソースコード読んでたら、MUGENでも使える良い?感じの判定があったから紹介

var(0) < 0 || var(1) < 0



(var(0) | var(1)) < 0

と書く

Cは短絡評価があるから微妙だけど、MUGENはそんなのないから問題なし


個人的には、数値表現に依存してるから好きではない

それほど速くなるわけでもないでしょ?

その程度の最適化はコンパイラにやらせれば良いじゃん
プロフィール

Author:drab
霊夢改変キャラ
「12 3 ! {V} [_]」
公開中
L霊夢でもl_reimuでも好きなように読んでください

最新記事
最新コメント
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク