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

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

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

全過去ログを検索

<< 0 >>
■6132  Re[1]: 時計回り、反時計回り判定
□投稿者/ れい -(2007/08/01(Wed) 20:24:38)
    No6130 (セイン さん) に返信
    > 時計回り、反時計回りの判定方法として、下記サイトの一番上に書いてある行列の計算から求めてみましたが、
    > 特定の条件時は、当てはまらないようです。

    なぜ行列式の和で出るとおもったのでしょうか?
    あれは3点でだけ成り立つ特殊な場合です。
    複数点に拡張した場合は成り立ちません。

    Clockwise/Unclockwiseの判定は
    簡単でエレガントな方法があります。
記事No.6130 のレス /過去ログ18より / 関連記事表示
削除チェック/

■23376  Re[2]: 2次元配列  Redimについて
□投稿者/ よねKEN -(2008/08/13(Wed) 12:05:00)
    2008/08/13(Wed) 12:06:00 編集(投稿者)

    To:επιστημη さん
    > ReDim a(30,3)
    > とかなんとかすりゃえぇです。

    Redimで変更できるのは、最も右側のインデックスのサイズだけなので、
    そういうことはできません。

    2次元配列のままなんとかしようとした場合の答えは、
    No23371 で提示されている初心者さんの自己レスの通りです。


    To:初心者さん

    強引に2次元配列のままで済まそうとするより、
    名前、性別、年齢を保持するクラスを定義して、このクラスの1次元配列にする方がよいと思います。
    さらに言えば、要素の数を動的に増やしたいような場合は、System.Collections.Generic.List(Of T)クラスなどのリスト
    を使った方がよりよいでしょう。

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

■67879  Re[1]: Wordファルの開き方
□投稿者/ 774RR -(2013/09/08(Sun) 08:31:56)
    えっと、提示コードはずばり自分の書いたコードのコピペ?
    エラーメッセージの主張しているところは、「引数が不整合」だ。
    実際、16個の引数が必要なのに正しく渡せていないっぽいが。
    ソースコードに ...... なんて書いても文法的意味がない。

    C++/CLI はニッチ目的な言語でユーザーも少ないし C# より難しいし
    情報が少ないのはある意味しょうがない。
    C++/CLI でなければならない理由がある、なら別だが、
    乗り換えることができるのであれば C# 逝っちゃえ。
記事No.67844 のレス /過去ログ115より / 関連記事表示
削除チェック/

■80416  Re[3]: Re: Excelの選択範囲をjpgで保存したい(C#)
□投稿者/ 魔界の仮面弁士 -(2016/07/16(Sat) 00:31:47)
記事No.80400 のレス / END /過去ログ137より / 関連記事表示
削除チェック/

■85967  Re[4]: 指数表記された文字列の数値変換方法について
□投稿者/ たかじ -(2017/12/06(Wed) 10:14:15)
    No85915 (魔界の仮面弁士 さん) に返信

    解決方法のご提案までありがとうございます。

    Deveel.Math.BigDecimalを初めて知ったので、
    サンプルを作成しながら利用可能か試しているのですが、気になる点があります。
    もしご存知でしたら教えていただけないでしょうか。

    ・BigDecimalの演算はAdd、Subtract、Multiply、Divideのメソッドを使用しないとだめなのでしょうか?
     下記の結果だと、Subtractを使用すると指数表記無しで、*だと指数表記なのも気になります。
    ・指数表記の値をToXXで変換するとエラーが発生するのですが、回避策などありますでしょか?

    Deveel.Math.BigDecimal b1 = 300;
    Deveel.Math.BigDecimal b2 = 10000000;
    Deveel.Math.BigDecimal b3 = b1 * b2;
    Deveel.Math.BigDecimal b4 = b1.Multiply(b2);
    Console.WriteLine("{0}", b1); // 300
    Console.WriteLine("{0}", b2); // 10000000
    Console.WriteLine("{0}", b3); // 3.00E+9
    Console.WriteLine("{0}", (UInt32)b3); // 3000000000
    Console.WriteLine("{0}", b4.ToDecimal()); // 3000000000
    Console.WriteLine("{0}", (decimal)b3); // 3000000000
    Console.WriteLine("{0}", b3.ToDecimal()); // 例外が発生(Negative exponent)

    以上、よろしくお願いいたします。
記事No.85832 のレス /過去ログ147より / 関連記事表示
削除チェック/

■85971  Re[5]: 指数表記された文字列の数値変換方法について
□投稿者/ 魔界の仮面弁士 -(2017/12/06(Wed) 13:31:14)
    2017/12/06(Wed) 14:06:25 編集(投稿者)

    No85967 (たかじ さん) に返信
    > Deveel.Math.BigDecimalを初めて知ったので、
    BigDecimal の実装例は他にもあります(例: No75940 )が、
    その中でも、Deveel は有名どころかと思います。

    Microsoft 製ライブラリによる BigDecimal 実装が欲しければ、
     C:\Windows\assembly\GAC_32\vjslib\2.0.0.0__b03f5f7f11d50a3a\vjslib.dll
    という手もありますが、今回の要件には合わないですね。
    https://blogs.msdn.microsoft.com/dd_jpn/2007/06/26/visual


    > ・BigDecimalの演算はAdd、Subtract、Multiply、Divideのメソッドを使用しないとだめなのでしょうか?

    「x * y」と「y * x」では結果が変わりますよね?

    x * y の右値(y)が何であれ、左値(x)の『精度』が優先されるためです。
    これは乗算だけでなく、加算・減算・除算においても同じことです。

    そして、このクラスにとっての x * y というのは、
    x.Multiply(y, new MathContext(x.Precision)) の意味です。



    //using Deveel.Math:

    BigDecimal b1 = 300;         // 300×10^0
    BigDecimal b2 = 10000000 ;     // 10000000×10^0
    BigDecimal b3 = b1 * b2;      // 300×10^-7
    BigDecimal b4 = b2 * b1;      // 30000000×10^-2
    BigDecimal b5 = b1.Multiply(b2);  // 3000000000
    BigDecimal b6 = b1.Multiply(b2, new MathContext(b1.Precision));
    BigDecimal b7 = b1.Multiply(b2, MathContext.Unlimited);

    Console.WriteLine("{0}", b1); // 300
    Console.WriteLine("{0}", b2); // 10000000
    Console.WriteLine("{0}", b3); // 3.00E+9
    Console.WriteLine("{0}", b4); // 3.0000000E+9
    Console.WriteLine("{0}", b5); // 3000000000
    Console.WriteLine("{0}", b6); // 3.00E+9
    Console.WriteLine("{0}", b7); // 3000000000


    >  下記の結果だと、Subtractを使用すると指数表記無しで、*だと指数表記なのも気になります。

    指数表現を望まないのであれば、ToPlainString メソッドを使ってみてください。


    > ・指数表記の値をToXXで変換するとエラーが発生するのですが、回避策などありますでしょか?
    > Console.WriteLine("{0}", (decimal)b3); // 3000000000
    > Console.WriteLine("{0}", b3.ToDecimal()); // 例外が発生(Negative exponent)

    これについては、キャストで事足りるかとは思ったのですが、
    どうやら駄目そうですね。

    まぁ、もともとは『3.4E+38』を変換するのが目的だったので、
    そもそも decimal 化で良いのか、という懸念もありますが。


    で、実装を見る限りは Hongliang さんが書かれているように、
    単なる実装バグのようです。

    原因については、端折って書くと No85853 で述べた
    精度(あるいは有効桁数)の問題です。

    今回の場合、b3.UnscaledValue は 300 なので、
    仮数部だけ見れば、十分に decimal の範囲なのですが、
    b3.Scale が -3 なので、decimal の指数部に収まらなかったという。


    単に「3000000000」という数値を表すにしても、
     decimal x1 = new Decimal(300000, 0, 0, false, 0); // x1 = 300000M;
     decimal x2 = new Decimal(3000000, 0, 0, false, 1); // x2 = 300000.0M;
     decimal x3 = new Decimal(30000000, 0, 0, false, 2);// x2 = 300000.00M;
    とは書けても、
     decimal x4 = new Decimal(300, 0, 0, false, (byte)-3);
    とするわけにはいかないということで。

    # 実際には、「BigInteger.ValueOf(10L).Pow(-3)」によるエラー
記事No.85832 のレス /過去ログ147より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -