<   2006年 04月 ( 6 )   > この月の画像一覧

e87.com(千趣会イイハナ) 花を贈るなら日比谷花壇

朝から京浜東北が止まってる。。。

久しぶりに京急に乗った。でも、いつも乗ってない電車は勝手が分からないな~
どこで乗り換えればいいか。乗り換えの駅は知ってるけど、そのどこで乗り換えると一番最適で最速か。。。わからん。

いつもの乗り換え駅で降りちゃったけど、次の乗り換え駅まで行ってしまった方が良かったみたい。

その辺、もう少しわかりやすくアナウンスしてくれると良いんだけどな~
[PR]
by isoq | 2006-04-28 08:52 | 携帯からの投稿
e87.com(千趣会イイハナ) 花を贈るなら日比谷花壇

コクワが起きた

昨年秋から冬眠していて3月終わりにライブチェックのために強制的に覚醒され(^_^;)、すぐにまた冬眠を始めた我が家のコクワですが、昨夜、起床しているところを確認しました(^^)

餌木の裏にいつものように張り付いていました。まだ雌は確認していませんが、すぐに起きるでしょう。

とりあえず餌をあげました。
[PR]
by isoq | 2006-04-27 09:12 | 携帯からの投稿
e87.com(千趣会イイハナ) 花を贈るなら日比谷花壇

新幹線

今日は大阪に出張でした。

帰りの新幹線で新幹線には色々な乗り心地向上の工夫がされているんだなーと感心してしまいました。

まず、テーブル。隣のテーブルと最大限離してつけられてる。

3人掛けシートの真ん中は多少広くなっている。

なるほどね。
[PR]
by isoq | 2006-04-25 23:21 | 携帯からの投稿
e87.com(千趣会イイハナ) 花を贈るなら日比谷花壇

MFCで発生するリンクエラー error LNK2005 はライブラリの読み込み順が原因

リンクエラーが発生しました。
こんな感じでした ↓
リンクしています...
nafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) は既に LIBCMT.lib(new.obj) で定義されています。
nafxcw.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) は既に LIBCMT.lib(delete.obj) で定義されています。
nafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) は既に LIBCMT.lib(new2.obj) で定義されています。
nafxcw.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete[](void *)" (??_V@YAXPAX@Z) は既に LIBCMT.lib(delete2.obj) で定義されています。
Release/xxx.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。


そこで、Webを検索してみると、frog.raindrop.jpの記事(error LNK2005) が見つかりました。

マイクロソフトのサポートサイト [PRB] C ランタイム ライブラリを MFC ライブラリより先にリンクしたときの LNK2005 エラー でも対処方の解説がされています。

MFCのプログラムで必ず最初にインクルードする stdafx.h では、最初に afxwin.h をインクルードし、さらにその中で afx.h がインクルードされています。
この afx.h が、ライブラリモジュール読み込み用の プラグマ を使用して、ライブラリの読み込み順を制御しています。

そのため、MFCのプログラム中で、 stdafx.h を最初にインクルードしないソースファイルがあると、このリンクエラーが発生するようです。

解決方法は、そのソースファイルに stdafx.h をインクルードするか、frog.raindrop.jpの記事(error LNK2005) で解説されているように、

... 解決策として、プロジェクトの設定でリンクの「無視するライブラリ」に Nafxcwd.lib と Libcmtd.lib を追加し(区切りはスペースでもカンマでもいいみたい)、「オブジェクト/ライブラリ モジュール」の方で、あらためて Nafxcwd.lib と Libcmtd.lib の順で指定したら、その順にリンクされるからうまくいく、と書いてある。

実はこれには補足があって、Nafxcwd.lib とLibcmtd.lib はともにデバッグ用のライブラリである。なので、Release でエラーが出る場合には、それぞれ Nafxcw.lib, Libcmt.lib に読み替えて設定する ...


とするかどちらか。

今回は、後者の方法でリンクエラーが解決しました (^^)
ありがたや、ありがたや。
[PR]
by isoq | 2006-04-20 17:54 | C/C++/Win32
e87.com(千趣会イイハナ) 花を贈るなら日比谷花壇

0.1 を 10回足しても 1.0 にならない!? ~ double の不思議

double は 8バイト=64 ビットで、10 桁以上(15桁)の精度を持つ浮動小数点数です。

10 桁以上と計算には十分な精度を持っていながら、同時にちょっと困った性質も持っています。

0 で初期化された double の変数に 0.1 を 10 回足しても、1.0 にならないのです。
どういう事かというと、次のようなコードを実行した場合、、、

    double d = 0;
    for(int i=0; i<10; i++)
    {
        d += 0.1;
    }
    if(d == 1.0)
    {
        printf("%f = %f -- same\n", d, 1.0);
    }
    else
    {
        printf("%10.20f != %10.20f -- differ\n", d, 1.0);
    }


結果は以下のようになります。


0.99999999999999989000 != 1.00000000000000000000 -- differ


なぜこのような事が起こるのか、、、

試しに、 0.1 を printf("0.1 is %10.20f\n", 0.1); として確認してみると、次のようになりました。


0.1 is 0.10000000000000001000


むむむ!

浮動小数点数の 0.1 は リアル0.1 よりも 0.00000000000000001 大きいにもかかわらず、10回足し合わせると リアル1.0 よりも小さくなってしまいます。

何とも不可思議です。

その理由は、2進数にあります。
2進数では、小数点数を表現するのが苦手なのです。
小数点数はやむを得ず近似されてしまうのです。
暇な人は調べてみてください。

有効桁数15桁までは正しい事には変わりありませんから、文句も言えません。

このように、いくら精度が良くても、計算結果が近似値になってしまうとなると、困った問題が発生する事があります。
特に、このプログラムのように = で値を評価しようとすると、予測値と計算値が = となることは滅多に無い事になってしまいます。

double(浮動小数点) で値を = で評価したいときには、誤差範囲 ±α を見込んだ比較関数を作成して、誤差範囲に入っているかどうかで 比較演算を行う必要がありそうです。
[PR]
by isoq | 2006-04-18 13:18 | C/C++/Win32
e87.com(千趣会イイハナ) 花を贈るなら日比谷花壇

PC不安定・インストール失敗の原因はメモリエラー

旧型のPCの調子が悪く、OSの再インストールをしたけど、インストールの途中でCDからファイルがコピーできない。
何度も何度も試して、CDドライブを取り替えたりしたけど、直らなかったので、1つだけファイルがコピーできないままインストールを続行した。
WindowsXPが起動するようになったけど、なぜか不安定。
たまにいきなり再起動したりする。

SP2をインストールしようとしたけど、何度か失敗して3度目の正直でインストール完了。
そして起動しなくなった。。。

BIOSの簡易チェックをはずして詳細チェックをさせてみると、メモリエラーがあることがわかった。
やっぱりね。

でも、このPCは、以前メモリエラーでメモリを交換している機体。
メモリクラッシャーなのかもしれない。

こんなことで半日以上の時間がつぶれてしまった。。。(;_;)
[PR]
by isoq | 2006-04-05 09:53 | コンピュータ
e87.com(千趣会イイハナ) 花を贈るなら日比谷花壇