昔の最近の出来事(2012.01)

2012/01/31

少し早めに帰着。

もそもそと調べごと。

2012/01/30

早くも無く遅くも無く。

gdcの新しいのが来ていたので、MinGWビルドを試してみたのですが、 状況変わらず。

2012/01/29

AM中に起床。

Fedoraの方でgcc-4.7対応のgdcのビルドを試してみたり。 リンカが-lgcc_ehを見つけられないのはMinGWの時と同じなのですが、 手動で対処したところHelloWorldレベルのコードは問題無くコンパイル&実行できました。 うーむ。MinGWってそんなに違うもんなのだろうか?

そういや、libphobosをコンパイルする際に自動生成されるソースがいくつかあるのですが、 MinGWのビルドではその生成がうまく出来ていなかったので、 gcc-4.6.2で生成したものをそのままコピーして使ってみたり。 でもやっぱり状況変わらず。

2012/01/28

起きたら昼過ぎ。寝すぎ。

ひかりTVのビデオに「あさりちゃん」が来てたり。なつかしー。 そういや過去の日記であさりちゃんについて一度も触れた事が無かったらしい (それらしき単語をgrepしても引っかからなかった)というのを今知りました。 大分前に本屋であさりちゃんの新刊が出てたのを見たとき、連載続いていたんだ というのを知りました。と言うのも、読んでいたのは20年以上も前の事で、 このページの 全巻表紙画像でも記憶にあるのは35巻くらいまで。就職したのを境に 新刊を買うことが無くなり読まなくなりました。 Wikipedia によると、てんとう虫コミックスの最長巻数と掲載期間の作品になっているそうな。
現在でも小学[ニ三四]年生で連載されているようなのですが、 小学[三四]年生の休刊に伴い 100巻で連載終了が決定しているそうです。

連載が続いていた事に全く気づくことが無かったのですが、実際に休載期間が あったのだろうか?と思いWebで調べてみたところ、2〜4巻/年 というペース で単行本が出続けており、何気に週間マンガと変わらないくらいの速度で出て いる事が判ったり。ほぼ二人で描いている事を考えると何気にスゴイ事かも。

2012/01/27

早めに帰着。

gcc-4.7対応のgdcをMinGWでビルドしてみたり。 以前、gcc-4.7対応されたものを 試した時は、phobosのビルド中にコンパイラがICEズッコケとなって ビルドできませんでした。
ベースとなるgccはgcc-4.7-20120121.tar.bz2というスナップショットを 使用しました。configure、make 実行で順調に進んでいたのですが、 libphobosのビルド途中でエラーが発生。でも、 makeを再実行するとなんとなく進んでビルド完了しました。 make installして手持ちコードをコンパイルしてみたり。 コンパイル自体はエラー無く通ったのですがリンクでエラー。 リンカが-lgcc_ehを見つけられないというものでした。 以前ppcクロスコンパイラを 使ってglibcをビルドしたときに同様のリンクエラーが出ましたが、 libgcc.aをシンボリックリンク(MinGWの場合はコピー)して良いと いうのをそのまま適用してみたり。で、リンクにも成功。
実行してみる訳ですが、Segfaultでずっこけて起動できず。 HelloWorldレベルのコードもダメで、gdbでスタックをトレース してみた所、core/runtime.dでずっこけている事が判ったり。

$ gdb -q ./a.exe
Reading symbols from C:\cygwin\home\tane\develop\dlang\test/./a.exe...done.
(gdb) run
Starting program: C:\cygwin\home\tane\develop\dlang\test/./a.exe
[New Thread 3456.0xcd0]

Program received signal SIGSEGV, Segmentation fault.
unitTest (this=) at ../../../libphobos/object_.d:1664
1664            if (isNew)
(gdb) Cannot access memory at address 0x23

(gdb) where
#0  unitTest (this=) at ../../../libphobos/object_.d:1664
#1  0x00419335 in core.runtime.runModuleUnitTests.__foreachbody6 (this=0x7c95741c, __applyArg0=0x23) at ../../../libphobos/core/runtime.d:360
#2  0x004052ac in object.ModuleInfo.opApply (dg=...) at ../../../libphobos/object_.d:1799
#3  0x00419410 in core.runtime.runModuleUnitTests () at ../../../libphobos/core/runtime.d:358
#4  0x00402250 in rt.dmain2.main.runAll (this=0x51d) at ../../../libphobos/rt/dmain2.d:583
#5  0x004021ac in rt.dmain2.main.tryExec (this=0x22ff2c, dg=...) at ../../../libphobos/rt/dmain2.d:543
#6  0x0040292d in rt.dmain2.main (argc=1, argv=0x3e2dc0) at ../../../libphobos/rt/dmain2.d:594
(gdb) Cannot access memory at address 0x23

途中「Cannot access memory at address 0x23」とか出て、結構メチャクチャ になっている予感がしなくもありません(^^; _Dmain()に到達する前で死んでる感じ。libphobosを-O0でコンパイルし直して みたのですが、それでも状況は変わらず。何かバグっているものと思われます。

急に眠くなって急速停止。

2012/01/26

気持ち遅めに帰着。

gdcでのstd/socketsteram.dのコンパイル後のアセンブラソースが変な件。 大分新しい11ae589b9a71はNGなのですが、大丈夫な 00b19ad7e81f を元に手でパッチを戻す事を試みてみたり。 全部戻すと00b19ad7e81fより後に入った修正まで戻ってしまうので、 必要と思われる部分だけを戻す必要があります。
な訳ですが、かなり雑な戻し方をしてどうにか大丈夫な感じに。 戻したのは、d-decls.ccのFuncDeclaration::toThunkSymbol() 内のコードと、d-objfile.ccのmake_alias_for_thunk ()と、 ObjectFile::outputThunk()内のコードです。戻しすぎている 気がしなくもありませんが、ひとまず結果オーライという事で。

あ、でも、-O1または-O2にバグがありそうな(-O0だと大丈夫) は直ってないのが微妙。

2012/01/25

早くも無く遅くも無く。

gdcのロードマップなる ものが示されているようです。これによると、今年の3月上旬には gcc-4.6.xのサポートを停止してgccの開発バージョンへの同期を始めるようです。 gcc-4.7.0のリリースは3月くらいかな?と予想しているのですが、 それに入れるには同期を始めるのが遅すぎる気も。4月だとすれば少し時間は ありそうですが、それでもリグレッションテストなどを考慮に入れると やっぱり4.7.0には入れられないような。

2012/01/24

遅めに帰着。

std/socketstream.dが変なシンボルを要求してリンクに失敗する件を調査。 またコミットを遡ってみました。その結果、e060d079e138で壊れているという 事が判明。

e060d079e138以降の版とそれより前の版とで、それぞれ libphobos/std/socketstream.d を gdc -O2 -S socketstream.d てな感じでコンパイルしてアセンブラソースを 生成すると、全く異なるコードが生成されている事が判ります。 壊れている方は本来生成されるべきコードが存在していない感じになっている為、 その部分に対して リンク時に外部シンボルとして存在する事が期待される訳ですが、 そんなものはそもそも存在しない為、undefined symbols になってしまうという流れです。

e060d079e138での変更を外せばいけるんだろうと思うのですが、変更点が多すぎて 手で戻す事が困難な気が。

2012/01/23

早くも無く遅くも無く。

std/socketstream.dが変なシンボルを要求してリンクに失敗する件を調べたり。 ver030とver031のそれぞれのgdcを使って、std/socketstream.dのアセンブラソース を出して比べてみたり。すると、ver030のアセンブラソースはシンボルの先が ジャンプテーブルになっていて参照先が存在するのですが、 件のver031のアセンブラソースでは参照先が存在しないという感じになっていました。 Linuxの方ではどうなんだろ?と思い、少し前のver031のgdcで同じく std/socketstream.dのアセンブラソースを見てみたところ、やはりジャンプテーブル になっていて参照先が存在している模様。MinGWの方で変なコードを出す gdcと同じ版のをビルドして確認してみる事に。

ビルドはエラー無く終了。で、アセンブラソースを出してみたのですが、 MinGWのそれと同じ感じになったり。
3dc024965ff2ではジャンプテーブルのコードが生成されているのですが、 11ae589b9a71だと壊れている感じ。うーむ、間に色々ありすぎて、どこで 壊れているのか判らない......(^^;

そういや、gcc-4.7.xに向けたgdcのコミットが行われています。 RC(Release Candidate)と付いているのですが、まだgccに取り込まれる感じでは なく、gcc-4.[56].xと同じ感じみたい。でも、gcc-4.7.0がリリースされる (多分今年の3月くらいになると思われる)と同時に使える感じではあるのかも。

2012/01/22

AM中に起床。

そういや、少し前は DMD2.057対応がされていなかった Bindings for the Windows API ですが、今日見たら対応済みになってました。D1にも対応が必要なので、 TANEが行ったような単純にtypedef をaliasに文字列置き換えするような 対応方法ではないようです。で、新しいので手持ちコードをいくつか ビルドしてみたのですが特に問題無さげ。

gdcの6f10e575ee76で、手持ちコードを全てビルドテストしたところ、 いくつか不具合があったり。一つは -O1または-O2でとあるソースをコンパイル してそれを含んだバイナリを実行するとSegfaultする。-O0だと大丈夫な事から、 オプティマイズにバグがありそうな予感。 もう一つはリンク時に socketstream.dが「___t.0」とか変なシンボルを要求していて リンクに失敗する。これは何が関係しているのか見当が付かず。

Webを眺めていると、Gdc Hacking なる文章が置かれていたり。

DMDの本家ページの Changelogページ を見てみると、DMD2.058の変更点が書かれていたり。upcoming Feb 13, 2012 と なっているので、2/13に2.058がリリースされる予定という事なのかしら?

2012/01/21

AM中に起床。

DMD2.057ベースのgdcで、std.regexを使用するとずっこける手持ちコード があるのですが、それを少し調べてみたり。ずっこけっぷりは以前 調べたのと同じ感じ。
std/regex.dが大幅に変更されていて、それがトリガとなっているのは 事実なのですが、実際にずっこけるのはrt/aaA.d内のコードなので、 rt/aaA.dのバグの線も無くはないという気が。で、デバッガで追いかけて みるのですが原因究明に至らず。

    obj_reg_tbl["mtllib"] = regex( "^mtllib\\s+(\\S+)","") ;

というコードの中でずっこけています。しかし、このコードは クラスのコンストラクタ内のコードで、一発目のインスタンスでずっこける のではなく、二発目のインスタンスでずっこけるとか。単純なコードの バグであれば、初回の実行でずっこけても良さそうなのですが、 そういう訳ではなさそうな予感。

そういや、セブンイレブンでおにぎりを買う事があるのですが、 ここ最近、おにぎりの値段が微妙に上がってて、あれぇ?前はもっと 安かったような?と思ったり。まぁ、時々100円均一をやってたり するので、イーブンなのかも知れませんが。

2012/01/20

早めに帰着。

あまりの眠さに急速停止。

2012/01/19

飲み会。早くも無く遅くも無く。

ちょろっと調べごとをして終了。

2012/01/18

早めに帰着。

ここ数日、gdcが頻繁にアップデートされているのは何故だろう?

いつの間にか寝てたり。

2012/01/17

早めに帰着。

gdcの新しいのをビルドする件。昨日ダメだったのは以前 遭遇したstd/regex.dのバグっていた件でした。

そんな訳で手持ちコードをビルドして確認。なんとなくOKそう。

で、gdcのCommitsを 見てみると、24時間以内に何やら大量に変更が加えられていたり。 その中の 2120e0cbde30 で件のmultiple definition の修正が加えられてました(^^;; なんてタイムリー。 そんな感じなので結局必要になりそうなのは、「マルチスレッド関連の不具合を改善する自前パッチ」と、 「std.regex を古いのに戻す」の2点だけかも(^^;

今日時点の gdc最新版である 6f10e575ee76 のビルドを試してみました。 まずは自前パッチ無しで試してみたところ、ビルドは一発OK。makeの二度打ちも 不要になってました。make installして使ってみたところ、 gcc/atomics.d内コードで_sync_bool_compare_and_swap_4が見つからなくてリンクでエラー。 libphobosのビルドに -march=i686を足す必要があるみたい。 x86_64対応に関連するのだろうとは思うのですが、毎度何かしら同種(要 -march=i686)の レベルダウンをしている気も。

ひとまずphobosの自前パッチを当てて、std/regex.dを古いのに戻して phobosを再ビルド して、手持ちコードをコンパイルしてみた所、ひとまず問題無さそうな感じに。 これでしばらく使ってみます。

2012/01/16

早めに帰着。

新しいgdcでマルチスレッドな手持ちコードをコンパイル&実行したら 起動でずっこける件を調べたり。 デバッガで少し追いかけたところ、lifetime.d:rt_processGCMarks()内で ずっこけている事が判り、例の奴だという感じだったり。

rt_processGCMarks()内で使用するBlkInfoという構造体型の cacheが不当という感じなのですが、直接の原因はcacheのメンバー変数 であるポインタbaseが、アクセスできない領域を指しているというもの。 以前調べたのと違って、明らかにアクセス不能と思われるアドレスでは なく、それっぽい感じの場所を指しているようにも思えるのですが、 デバッガでその領域をダンプしようとするとアクセスできない領域に なっているようです。結局前も判らなかったのですが、この領域を 最初にどこで割り当てているのかが不明。また、中身をどこで入れている のかも不明。この辺を突き止める必要がありそう。

ちょっと直し方を変えてみたところ、なんとなく大丈夫そうになったり。 でもまだダメな感じの奴がいてまだ調べる必要がありそう。

2012/01/15

AM中に起床。

gdcのバージョン遡り中。少し模様が見えてきたり。ざっくり言うと phobos2のconfigureが再構築されたのを機に変になっている模様。

  :
goshawk-gdc-4dfa4c11ccd7 → OK
goshawk-gdc-b3200b086277 → NG  phobosのconfigure実行に失敗
goshawk-gdc-63647d6f2b87 → NG  phobosのconfigure実行に失敗
  :
goshawk-gdc-d71656e55ad8 → --  ビルドは試して無いが phobos2/configureが再生成されている
  :
goshawk-gdc-e8ae51578e54 → NG  multiple definition
  :

最初にconfigureが再生成されたのはb3200b086277で、autoconf-2.68で生成されていたものが autoconf-2.64 で生成し直されています。自動生成ファイルの為、差分が山ほどある訳ですが、 何がどうまずいのか不明。

んー、ちょっと違うかも。b3200b086277で configureが再生成されたのは確かなのですが、 もう一度再生成された d71656e55ad8 のconfigureは 正しくビルドできた 4dfa4c11ccd7と 全く同じファイルになっています(即ち元に戻っている)。という事で、multiple definition になるのはphobos2/configure の変更には関係無い気がしてきました。

もう少し進めた結果以下のような感じに。

  :
goshawk-gdc-4dfa4c11ccd7 → OK
goshawk-gdc-b3200b086277 → NG  phobosのconfigure実行に失敗  #configureとMakefile.inが変更されただけ
goshawk-gdc-63647d6f2b87 → △  phobosのconfigure実行に失敗→configureを直せばOK
goshawk-gdc-bd1f89846e93 → NG  ★configureを直したが multiple definition
            7470a20b2900
            bedf43669633        # D1のphobosのconfigreが変更されただけ
goshawk-gdc-d71656e55ad8 → NG  multiple definition   #ここでconfigureが 4dfa4c11ccd7と同じに戻った
  :
goshawk-gdc-e8ae51578e54 → NG  multiple definition
  :

どうやら、bd1f89846e93で壊れてしまっている模様。内容もなんだか試しに修正した ようなものっぽい。configureが壊れている間に別の変更で別の所が壊れてしまっていた というのがややこしい感じです。

そんな訳で、4日前にコミットされた 9080fbf1a074 から、bd1f89846e93で加えられた 変更を手で元に戻してビルドしてみたり。make installして手持ちコードをコンパイル してみたところ、multiple definitionでリンクに失敗する現象は出なくなったり。

自前パッチをあてて、マルチスレッドな手持ちコードをコンパイルしてみたところ、 起動した途端にずっこける現象が再発したり。パッチが効かなくなった模様。うーむ。

2012/01/14

朝から休出。気持ち早めに帰着。

gdcのバージョン遡り中。

いつの間にか寝ていたり。

2012/01/13

早くも無く遅くも無く。

gdcのバージョン遡り中。

あまりの眠さに急速停止。

2012/01/12

遅めに帰着。

gdcの新しいのがリンク時にmultiple definitionでエラーして使えない件。 結局何が悪いのか見当が付かないので、ビルドできたバージョンに向かって 順に遡ってみる事にしたり。

2012/01/11

早くも無く遅くも無く。

昨日のconfigureオプションを変えてのgdc再ビルドはひとまず完了。 make installして使ってみるも、やっぱりリンクで大量の multiple definition でエラー。 んー、うちの環境の問題なのか??

Wings3Dのスナップショット版の更新ノートを見ていると、日本語対応という のが取り込まれているというのを知ったり。で、インストールしてみたり。 MSVCR100.dllが見つからないというエラーが出たのですが、 Microsoftのダウンロードサイトで拾ってインストールすることで、 無事起動できたり。Edit→PreferencesのUserInterface内のLanguageを Japaneseにして再起動するとメニューなどが日本語で表示されるように なりました。でも、下手に日本語になっている方が何の事だかよく判らなかったりも(^^; そんな訳で英語表示に戻しました(^^;; 英語が得意な訳では全然無い(むしろダメな方) のですが、Wings3Dは海外の方が参考になるサイトが多いので、メニュー表示は 英語のままの方が都合が良いです。
そういや、Inkscapeもメニューなどが日本語になっているのですが、このせいで本家の 参考操作の手順がメニューのどこにあるのかさっぱり探せなかった事があります(^^;

2012/01/10

気持ち遅めに帰着。

gdcのMinGWのバイナリが有志によって 置かれている のですが、割と最近のバージョンのバイナリが置かれていたり。 手持ちソースのリンクができない問題が解決されているのだろうか?と思い ビルドしてみるのですがやっぱりダメ。そんな訳で、configureオプションに 違いが無いか確認してみたり。ほぼ同じなのですが、--disable-sharedオプションを 付けてないという差があったり。以前は --disable-shared が必須 だったと思うのですが、最近は外しても良くなったのか?そんな訳で もう一度ビルドし直してみたり。

終わらないのでほっぽらかし。

2012/01/09

朝から休出。そして気持ち早めに帰着。

あまりの眠さに急速停止。

2012/01/08

朝から休出。そして早くも無く遅くも無く。

ちょろっと調べ事をして終了。

2012/01/07

起きたら午後もいい時間。寝すぎ。

最近はコンスタントにgdcの変更が加えられています。先日ver0.31に なったのですが、その後、サポートgccを gcc-4.5.x 以降に絞る変更が加えられた ようです。確かに、ビルドのエラー報告なんかを傍から見ていて、 新たにビルドしてるのに何故gcc-4.4.xを使うの?と思う事がありました。 これで本家のDMDとのマージも早くなったりするかな?

そういえば、GMPを使うのにクラスで実装していたのを構造体にすると うまく動かなかった話がありましたが、それの再現を試みたり。 以下のコードでそれと同じ話が再現できていると思います。

     1  import std.stdio ;
     2  import std.string ;
     3  
     4  struct Buffer
     5  {
     6    int  *p ;
     7    
     8    void alloc(int n){
     9      p=cast(int*)(core.memory.GC.malloc(int.sizeof*n)) ;
    10    }
    11    
    12    ~this(){
    13      writef("destruct\n") ;
    14      core.memory.GC.free(p) ;
    15      print() ;
    16    }
    17    
    18    void print(){
    19      writef("p=%08x\n",p) ;
    20    }
    21  }
    22  
    23  void foo(Buffer buf)
    24  {
    25    buf.print() ;
    26    return ;
    27  }
    28  
    29  void main()
    30  {
    31    Buffer buf ;
    32    buf.alloc(10) ;
    33    foo(buf) ;
    34    buf.print() ;
    35  }

このコードをコンパイル&実行するとハング状態に陥ります(^^; が、ハング 状態になるのは別件だと思われます。さておき本題ですが、流れとしては 以下のような感じになります。

  1. 32行目のbuf.alloc()でbuf.pにmalloc()で割り当てたメモリ領域のポインタが格納されます。
  2. 33行目のfoo(buf)により、構造体渡しでbufが渡されます。参照渡しではありませんので、 foo()内のbufは31-34行目で使用しているbufのコピーになります。
  3. foo()関数を抜ける時にfoo()内bufのデストラクタが実行されます。ここで順番1のmalloc()で 割り当てた領域が開放されます。これは意図しない開放だと言えます。
  4. 34行目を実行した後、main()関数を抜ける所でbufのデストラクタが実行されます。ここで もう一度free()が実行されます。

順番の3と4で 実体は1つの(つもりの)bufに対して、free()が二度実行される事になります。 これが、クラス実装を構造体実装にしたときにうまく動かなかった原因です。 二重開放になるので、Cライブラリの free()だと何も起こらないか、二重開放している 旨のメッセージが出るのですが、現在のcore.memory.GCの free()はハングしてしまうようです。 因みに、この例ではfoo(Buffer buf)を foo(Buffer *buf) とポインタ渡し(参照渡し)にすると、 foo()を抜ける時にbufのデストラクタは働きませんので、二重開放になる事はありません。

そんな訳で、演算子のオーバーロード向けに構造体返しするような実装で、 配列やポインタを構造体メンバー変数に持った場合はデストラクタで暗に開放しない 方が良いという点に注意する必要がありそうです。

2012/01/06

早くも無く遅くも無く。

あまりの眠さに急速停止。

2012/01/05

日付け越え前に帰着。

先日のビルドはun.dのコンパイルでエラーするのでmake二度打ちで エラー無くビルドできたり。で、make installして手持ちコードのコンパイル を行ってみたのですが、やっぱりmultiple definition が大量に出て リンクできず。

Fedoraの方でビルドを試してみたり。こちらはエラー無くmakeできました。 で、make installして使ってみるのですが、リンクも特に問題無いようです。 そんな訳でMinGW向けにだけ壊れているという謎な状況の様です。

2012/01/04

気持ち遅めに帰着。

gdcがver0.31になった模様。先日、ビルドはできたものの手持ちコードを コンパイルすると大量に multiple definition でリンクがエラーしてましたが、 その後も少し手が入って0.31になっている模様。しかし、件のリンクエラーが 直っているのかは不明。

そんな訳でgdc 0.31のMinGWビルドを試してみたり。見ていられないので makeを仕掛けて寝たり。

2012/01/03

AM中に目が覚め、もにゃもにゃしてたら昼前に。

随分前に録画したまま見る暇の無かった けいおんの映画特番を見たり。 監督の 山田尚子氏がVTRで出てて、なんか若っ!と思わず声に出てしまいました(^^;;

ぐうたら過ごして終了。明日から仕事始めですが復帰できて無いなぁ(^^;;;;;

何気にFirefoxのアップデートをしたら、いきなり9.0.1になって驚いた。 2ヶ月くらい前に8.0になったと思ったのですが、こんなに早くメジャーバージョンが 上がるもんでしたっけ?

2012/01/02

AM中に起床。

昨日の1.0e+100倍くらいの拡大は仮数部のビット数を512bitにするくらいで 大丈夫そうでした。でも、640x480のサイズで3時間くらいかかりました(^^;

色付けの方法とかマルチスレッド化とか色々いじり所はありますが、 プロ遊の下に置いてみました。 御参考まで。

Webを散策していたら、3Dでフラクタルを描けるフリーソフトウェアを 見つけたり(Mandelbulber)。 サイトの動画を見たりちょろっと触ってみたり。これ、凄すぎる(^^;;

何気にgdcの新しいのをビルドしてみたり。un.dのコンパイルでエラーするので makeを二度実行するのは変わりませんが、それ以外はエラー無くビルド完了したり。 で、make installして、手持ちコードをコンパイルしてみたところ、 リンクで大量にエラー。何故か multiple definition が 大量に出たのですが原因が全く判らず。

来週始まるらしい「アクエリオンEVOL」の特番をやってたのをなんとなく 観たり。番組中に監督である河森正治氏が出演していました。 初めて御顔を拝見したのですが、思ったよりも若い感じだったので、 何歳なんだっけ?とWikipediaを漁ったところ51歳だと判りへー。 でも、マクロスの劇場版とかで監督やってた人だよなぁ?と思うと、 改めてスゴイ人なんだなぁと思ったりも。

2012/01/01

明けましておめでとうございますm(_'_)m 今年もよろしくお願いします。

そういや、TVの番組表を見ていると、「日常(あらゐけいいち)」のアニメが Eテレで放送される事になっていて驚いたり。こんな事ってあるんだ。

PNGセーブを行うのに、Laymanのコードを引っ張ってきたのですが、 PNGの1.0.x時代のコードなもんだから、1.5.xだと全然様子が違ってて死亡。 で、色々説明書などを漁ったのですが、PNGファイルを示すシグネチャ (ファイルの先頭8byte)が書き込まれなくて、ローダでPNGファイル判定されなかったり。 適当なPNGファイルを参考にfputc()で書き込んでから png_write_info()、データ本体 の順で書き込んだらPNGファイル判定もされ、 画像展開も大丈夫だったり。つまり、シグネチャ以外はちゃんと書き込めている模様。 で、png.hを眺めていたらpng_write_sig()なる関数があり、これを使えば シグネチャを書けそうな感じなのですがやっぱりダメ。なんてこった。

寝て起きたら昼過ぎ。

もそもそとコーディング。マンデルブロ集合のビュア。一気に 1.0e+100倍 まで拡大を 試みたのですが、演算解像度が足りなくてモザイク模様になったり。仮数部のビット数 を256にしていたのですが768にしてみたり。このせいで仮数部の桁表示が230桁を越えて しまった為、ウインドを思いっきり広げないと値が全体表示できなくなったり(^^;;

仮数部の桁を増やしたのに何故か変化が無くてなんでだ?と思っていたら、もう一箇所 変えなくてはならないのが抜けていたり。凡ミス過ぎる(^^;


TOP PREV