C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 >>
■8712  Re[3]: MissingMethodExceptionで死亡
□投稿者/ 渋木宏明(ひどり) -(2007/10/08(Mon) 22:00:58)
>
    2007/10/08(Mon) 22:15:00 編集(投稿者)

    > すみません。internalにすることは決定事項のようで、僕にはどうすることもできません。

    「public にすることがマズい」のならば、どうして

    > もしかしたら、それがinternalに変わったことが原因かもと思い、それらのコンストラクタをpublicにしました。
    > ビルドして実行すると、例外がなげられず、うまくいきました。

    という対応が許されるのでしょう?

    隠すなら全部隠さないと意味がないように思いますが。
記事No.8699 のレス /過去ログ20より / 関連記事表示
削除チェック/

■15736  Re[5]: 他アプリに対して、ファイルパスをドロップ
□投稿者/ 熊谷隆史 -(2008/03/19(Wed) 18:21:23)
    No15732 (ぽぴ王子 さん) に返信
    ぽぴ王子さん、ありがとうございます。
    この様に言ってくださる方がいらして、
    救われました。
    
    > ちょっと調べてみたけど、IDropTarget::Drop はドロップされたときに呼ばれる
    > 関数みたいですね。
    > ってことは、ドロップを擬似的に再現したいってこと?(流れを読むとそんな感じ
    > みたいなのでてきとーに言ってます)。
    
    そうです。
    
    
    > 自分が言うのもアレですが、もうちょい知識を深めてみてからチャレンジしてみては
    > どうでしょうか。
    
    基本から勉強し直したいと思います(道が開けそうです)。
    ありがとうございました。
記事No.15727 のレス / END /過去ログ32より / 関連記事表示
削除チェック/

■39098  Re[9]: OracleDataReaderで
□投稿者/ επιστημη -(2009/07/30(Thu) 10:48:08)
>
    > 完全に
    > private void Form1_Load(Object sender, EventArgs e)
    > { ... }
    > この処理を通っていません…。

    Form1のLoadイベントにこのメソッド:Form1_Loadがアタッチされていますか?
    それをやらずに(イベントアタッチせずに)このメソッドを書き加えただけでは
    呼んではくれませんょ?
記事No.39034 のレス /過去ログ67より / 関連記事表示
削除チェック/

■54883  Re[2]: メソッド名の相談
□投稿者/ かたぎり -(2010/11/08(Mon) 11:54:21)
    ベタに名づけてみたw

    GetMaxInSouce
記事No.54880 のレス /過去ログ92より / 関連記事表示
削除チェック/

■91848  Re[4]: C++からVBへの変換
□投稿者/ えん -(2019/08/07(Wed) 14:28:48)
    ありがとうございます。
    
    実は
    http://www.kurims.kyoto-u.ac.jp/~ooura/fftman/ftmn1_23.html#sec1_2_3
    
    このページのコードを翻訳しています。
    
    
    
        theta = -8 * atan(1.0) / n;
        for (m = n; (mq = m >> 2) >= 1; m = mq) {
            for (i = 0; i < mq; i++) {
                w1r = cos(theta * i);
                w1i = sin(theta * i);
                w2r = cos(theta * 2 * i);
                w2i = sin(theta * 2 * i);
                w3r = cos(theta * 3 * i);
                w3i = sin(theta * 3 * i);
                for (j = i; j < n; j += m) {
                    j1 = j + mq;
                    j2 = j1 + mq;
                    j3 = j2 + mq;
                    x0r = ar[j] + ar[j2];
                    x0i = ai[j] + ai[j2];
                    x1r = ar[j] - ar[j2];
                    x1i = ai[j] - ai[j2];
                    x2r = ar[j1] + ar[j3];
                    x2i = ai[j1] + ai[j3];
                    x3r = ar[j3] - ar[j1];
                    x3i = ai[j3] - ai[j1];
                    ar[j] = x0r + x2r;
                    ai[j] = x0i + x2i;
                    x0r = x0r - x2r;
                    x0i = x0i - x2i;
                    ar[j1] = w2r * x0r - w2i * x0i;
                    ai[j1] = w2r * x0i + w2i * x0r;
                    x0r = x1r - x3i;
                    x0i = x1i + x3r;
                    ar[j2] = w1r * x0r - w1i * x0i;
                    ai[j2] = w1r * x0i + w1i * x0r;
                    x0r = x1r + x3i;
                    x0i = x1i - x3r;
                    ar[j3] = w3r * x0r - w3i * x0i;
                    ai[j3] = w3r * x0i + w3i * x0r;
                }
            }
            theta *= 4;
        }
    
    の部分は以下で合っていると思います。
    
    
            Dim theta = -Math.PI * 2 / n
    
            Dim m As Integer = n
            For g As Integer = 1 To CInt(Math.Log(n, 4))
    
                m = CInt(m / 4)          
                Dim mq As Integer = CInt(m / 4)
    
                For i As Integer = 0 To mq
    
                    Dim w1r As Double = Math.Cos(theta * i)
                    Dim w1i As Double = Math.Sin(theta * i)
                    Dim w2r As Double = Math.Cos(theta * (2 * i))
                    Dim w2i As Double = Math.Sin(theta * (2 * i))
                    Dim w3r As Double = Math.Cos(theta * (3 * i))
                    Dim w3i As Double = Math.Sin(theta * (3 * i))
    
                    For j As Integer = i To n Step m
    
                        Dim j1 As Integer = j + mq
                        Dim j2 As Integer = j1 + mq
                        Dim j3 As Integer = j2 + mq
                        Dim x0r As Double = xr(j) + xr(j2)
                        Dim x0i As Double = xi(j) + xi(j2)
                        Dim x1r As Double = xr(j) - xr(j2)
                        Dim x1i As Double = xi(j) - xi(j2)
                        Dim x2r As Double = xr(j1) + xr(j3)
                        Dim x2i As Double = xi(j1) + xi(j3)
                        Dim x3r As Double = xr(j3) - xr(j1)
                        Dim x3i As Double = xi(j3) - xi(j1)
                        xr(j) = x0r + x2r
                        xi(j) = x0i + x2i
                        x0r = x0r - x2r
                        x0i = x0i - x2i
                        xr(j1) = (w2r * x0r) - (w2i * x0i)
                        xi(j1) = (w2r * x0i) + (w2i * x0r)
                        x0r = x1r - x3i
                        x0i = x1i + x3r
                        xr(j2) = (w1r * x0r) - (w1i * x0i)
                        xi(j2) = (w1r * x0i) + (w1i * x0r)
                        x0r = x1r + x3i
                        x0i = x1i - x3r
                        xr(j3) = (w3r * x0r) - (w3i * x0i)
                        xi(j3) = (w3r * x0i) + (w3i * x0r)
    
                    Next j
    
                Next i
    
                theta *= 4
    
            Next g
    
    
    しかし、
    Dim x0r As Double = xr(j) + xr(j2)
    のところで、
    j2にj + mq + mqが代入されるため、
    xrの要素数であるnを超えてしまい、エラーとなってしまいます。
    
    一体どうすれば良いでしょうか?
    
    もしかして、元のコードが間違っていますか?
    
記事No.91843 のレス /過去ログ158より / 関連記事表示
削除チェック/

■91850  Re[5]: C++からVBへの変換
□投稿者/ 魔界の仮面弁士 -(2019/08/07(Wed) 16:02:00)
    No91848 (えん さん) に返信
    > theta = -8 * atan(1.0) / n;
    >>
    > Dim theta = -Math.PI * 2 / n
    
    「Math.Atn(1.0) * 4」は「Math.PI」と同義なので、
    ここは VB 側の書き方の方が分かりやすいですね。
    
    
    > for (m = n; (mq = m >> 2) >= 1; m = mq) {
    >>
    > Dim m As Integer = n
    > For g As Integer = 1 To CInt(Math.Log(n, 4))
    >     m = CInt(m / 4)          
    >     Dim mq As Integer = CInt(m / 4)
    
    Visual Basic のバージョンは何ですか?
    
    ビットシフト演算子を持たない VB7.0 (VB.NET 2002) の場合はさておき、
    VB7.1 (VB.NET 2003) 以降であれば、元の処理そのまま
    「>> 演算子」を使った方が移植しやすいかと思います。
    
    未検証ですが、こんなイメージ?
    
    Dim m As Integer = n
    Dim mq As Integer = m >> 2
    Do While mq >= 1
      '…
      '…
      '…
      m = mq
      mq = m >> 2 
    Loop
    
    
    > For g As Integer = 1 To CInt(Math.Log(n, 4))
    
    CInt は切捨てでも四捨五入でも無いのでご注意を。
    
    n が  2 の場合、CInt(Math.Log(n, 4)) は CInt(0.5000) となり、結果は 0 です。
    n が  8 の場合、CInt(Math.Log(n, 4)) は CInt(1.5000) となり、結果は 2 です。
    n が 32 の場合、CInt(Math.Log(n, 4)) は CInt(2.5000) となり、結果は 2 です。
    n が128 の場合、CInt(Math.Log(n, 4)) は CInt(3.5000) となり、結果は 4 です。
    n が512 の場合、CInt(Math.Log(n, 4)) は CInt(4.5000) となり、結果は 4 です。
    
    
    >  m = CInt(m / 4)
    
    上記は
     m \= 4
    書けます。
記事No.91843 のレス /過去ログ158より / 関連記事表示
削除チェック/

■91855  Re[7]: C++からVBへの変換
□投稿者/ 魔界の仮面弁士 -(2019/08/07(Wed) 16:48:10)
    No91851 (えん さん) に返信
    > VBでもビットシフトを使えるのは分かりますが、
    > 不慣れなせいかわかりづらいので、これを使わない方法に書き換えました。
    
    元の C++ コードを C# に置き換えて
    
     int n = 32768;
     int m, mq;
     for (m = n; (mq = m >> 2) >= 1; m = mq)
     {
       Console.WriteLine("m={0,7:N0}, mq={1,7:N0}", m, mq);
     }
    
    として実行してみたところ
     m= 32,768, mq=  8,192
     m=  8,192, mq=  2,048
     m=  2,048, mq=    512
     m=    512, mq=    128
     m=    128, mq=     32
     m=     32, mq=      8
     m=      8, mq=      2
    という結果になりました。
    
    また、No91850 の実装なら、元の C++/C# 版と同じ結果が得られました。
    
    
    一方、御提示頂いた No91848 の意訳実装で
     Dim n = 32768
     Dim m As Integer = n
     For g As Integer = 1 To CInt(Math.Log(n, 4))
      '
      Console.WriteLine("m={0,7:N0} =>", m)
      '
      m = CInt(m / 4)
      Dim mq As Integer = CInt(m / 4)
      '
      Console.WriteLine("m={0,7:N0}, mq={1,7:N0}", m, mq)
      '
     Next g
    とした場合、出力結果はこうなりますね。ループ回数が変化しています。
     m= 32,768 => m=  8,192, mq=  2,048
     m=  8,192 => m=  2,048, mq=    512
     m=  2,048 => m=    512, mq=    128
     m=    512 => m=    128, mq=     32
     m=    128 => m=     32, mq=      8
     m=     32 => m=      8, mq=      2
     m=      8 => m=      2, mq=      0
     m=      2 => m=      0, mq=      0
記事No.91843 のレス /過去ログ158より / 関連記事表示
削除チェック/

■91893  Re[18]: C++からVBへの変換
□投稿者/ 魔界の仮面弁士 -(2019/08/08(Thu) 16:44:07)
    No91892 (えん さん) に返信
    > 等価な変換ありませんでしたか

    No91848 で書かれていた URL のアルゴリズムはさっぱり分かりませんが、
    No91862 に書かれていた部分の

      n = (4の冪乗な整数);
      i = 0;
      for (j = 1; j < n - 1; j++) {
        for (k = n >> 1; k > (i ^= k); k >>= 1);

        DoAnything(i, j);
      }

    の処理について、DoAnything 部さえ同じ結果になれば良いのなら、
    こういう風に書くこともできますね。

      Dim bitLength As Integer = 2 * CInt(Int(Math.Log(n, 4)))
      For j As Integer = 1 To n - 2
        Dim bin As String = Convert.ToString(j, 2).PadLeft(bitLength, "0"c)
        Dim i As Integer = Convert.ToInt32(StrReverse(bin), 2)

        DoAnything(i, j)
      Next
記事No.91843 のレス /過去ログ158より / 関連記事表示
削除チェック/

■91990  Re[5]: コンボボックスによる絞り込み
□投稿者/ WebSurfer -(2019/08/16(Fri) 10:21:25)
記事No.91943 のレス /過去ログ160より / 関連記事表示
削除チェック/

■95010  Re[2]: batでのネットワーク接続名取得について
□投稿者/ tetris -(2020/06/11(Thu) 13:10:59)
    2020/06/11(Thu) 13:11:25 編集(投稿者)

    No95009 (魔界の仮面弁士 さん) に返信

    > 複数のネットワークアダプター(仮想的な物も含む)が同時に有効になることが
    > ありえるわけですが、その場合はどうするのでしょうか。
    ipconfig /all で表示される項目の中で 192.168.1.100(優先)
    この優先が含まれるネットワークアダプターを取得できたらと思っております。
    この条件を書くのを忘れていました。この優先がつくのは1つの接続名しかないはずなので・・・。

    > × Bruetooth
    > ○ Bluetooth
    誤字のご指摘ありがとうございます。

記事No.95008 のレス /過去ログ164より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -