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

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

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

全過去ログを検索

<< 0 >>
■86712  Re[3]: PDF→ページ単位でのイメージ変換について
□投稿者/ 末永 慎一 -(2018/03/01(Thu) 14:07:24)
記事No.86708 のレス /過去ログ149より / 関連記事表示
削除チェック/

■86713  Re[4]: PDF→ページ単位でのイメージ変換について
□投稿者/ WebSurfer -(2018/03/01(Thu) 15:01:59)
    No86712 (末永 慎一 さん) に返信
    >>iTextSharp-LGPL 4.1.6
    >>https://www.nuget.org/packages/iTextSharp-LGPL/
    > ありがとうございます。試してみます。

    iTextSharp Ver. 5 の場合、以下の記事に書いてある "結局はiTextSharpは有料販売されているAGPLv3なソフトでした"
    は正しいと思います。

    GPLやAGPLソフトウェアライセンスの分かりやすい解説:iText(iTextSharp)は有料?無料?
    https://nokoshitamono.blogspot.jp/2015/09/gplagpl.html

    ご自分でも itextsharp license などをキーワードにググってご自分でも調べてみてください。

    では何が良いかですが、PDFsharp がライセンス的には厳しくなくてよさそうという噂を聞きます。自分自身は使ったこ
    とはなくあくまで噂レベルですが。

    何にせよ、質問者さんの条件、スキル、好みなどは第三者には分かりませんので、ご自分で条件に合うものを使ってみて、
    ご自分で判断するという以外になさそうな気がします。

    また、ライセンスの話は、結局その著作権の保有者に確認しなければ安心できる回答は得られないと思います。ここでも
    回答者の過去の経験などに基づく話は聞けるかもしれませんし、参考にはなるかもしれませんが、それはあくまでその回
    答者さんの使用条件に基づくものでしょうから、質問者さんの使用条件によっては違ってくる顔しれません。
記事No.86708 のレス /過去ログ149より / 関連記事表示
削除チェック/

■92859  Re[1]: FloorとCeilingの有効桁数に関して
□投稿者/ 魔界の仮面弁士 -(2019/11/03(Sun) 10:58:27)
    2019/11/03(Sun) 11:41:38 編集(投稿者)

    No92856 (ぬこ さん) に返信
    > SingleやDoubleは
    > Integerとは異なり、
    > 1.99999992
    > や3.0000002
    > のような綺麗な整数ではない値をとるはずです。

    まず、そこの認識が間違っています。

    Single や Double は、2 や 3 という整数値なら、誤差なく格納のできる型です。
    小数部がジャスト 0 な整数値なら、Single なら 7 桁までは正確に保持できます。


    > Dim hh2 As Integer = CInt(Math.Floor(4.0! / 2))
    Single や Double は『二進小数』で管理される型なので、
    有効桁数の範囲内に納まるなら、2 で割っても誤差は生じません。

    十進数は「10」を基数としているため、「1÷10」や「1÷100」を誤差なく管理できます。
    でも「1÷3」は、有限桁数においては近似値表現となりますよね。

    三進数は「3」を基数としているため、「1÷3」や「1÷9」を誤差なく管理できます。
    二進数は「2」を基数としているため、「1÷2」や「1÷4」を誤差なく管理できますが
    「1÷10」は、有限桁数において近似値表現となります。


    なお、例示された値についてですが、
    1.99999992 は Single や Double では正確に表現できないため、Single なら
    1.99999988 という近似値(正確には 1.99999988079071044921875 )になってしまうはずです。

    そして Double の場合も、やはりピッタリ同じ値は持てません。
    1.99999992 に近い範囲で、Double 型で表現可能な値に丸められます。
    1.99999991999999915393004812358 … &H3FFFFFFFEA86711A
    1.99999991999999937597465304862 … &H3FFFFFFFEA86711B
    1.99999991999999959801925797365 … &H3FFFFFFFEA86711C
    1.99999991999999982006386289868 … &H3FFFFFFFEA86711D '☆少し小さい値
    1.99999992000000004210846782371 … &H3FFFFFFFEA86711E '★少し大きいが、これがもっとも近い
    1.99999992000000026415307274874 … &H3FFFFFFFEA86711F
    1.99999992000000048619767767377 … &H3FFFFFFFEA867120
    1.99999992000000070824228259880 … &H3FFFFFFFEA867121


    > 有効桁数のようなものが設定されているからなのでしょうか?
    符号ビットと指数部を取り除いた、「仮数部」のみを有効桁として扱うと
    Single 型の有効桁数は 二進小数表現で 23+1 桁。十進数に換算すると約 7.225 桁です。
    Double 型の有効桁数は 二進小数表現で 52+1 桁。十進数に換算すると約 15.955 桁です。

    Integer 型の有効桁数は 二進整数表現で 32-1桁。十進数に換算すると約 9.332 桁で、
    UInteger 型の有効桁数は 二進整数表現で 32桁。十進数に換算すると約 9.633 桁です。


    Integer という型で表現できる数値は、隣り合う数が常にジャスト 1 だけの差を持ちますよね。
    2 の前は 1 ですし、2 の次は 3 です。整数型ゆえ指数部が無いので、
    隣り合う値は常に「2 の 0 乗」すなわち 1 となります。


    それに対し、Single や Double においては、隣り合う値の間隔が一定ではありません。
    その絶対値が 0 に近いほど細かい差を表現でき、
    絶対値が大きくなるほど荒くなり、隣の値の差が広がっていきます。


    Single 型で表現可能な 2 の周辺値はこんな感じ。

    1.99999964237213134765625 … &H3FFFFFFD
    1.99999976158142089843750 … &H3FFFFFFE
    1.99999988079071044921875 … &H3FFFFFFF
    2.00000000000000000000000 … &H40000000 ★ジャスト2
    2.00000023841857910156250 … &H40000001
    2.00000047683715820312500 … &H40000002
    2.00000071525573730468750 … &H3FFFFFF3


    Single 型で表現可能な 200万 の周辺値はこんな感じ。

    1999999.625 … &H49F423FD
    1999999.750 … &H49F423FE
    1999999.875 … &H49F423FF
    2000000.000 … &H49F42400 ★ジャスト200万
    2000000.125 … &H49F42401
    2000000.250 … &H49F42402
    2000000.375 … &H49F42403


    Single 型で表現可能な 20億 の周辺値はこんな感じ。

    1999999616 … &H4EEE6B25
    1999999744 … &H4EEE6B26
    1999999872 … &H4EEE6B27
    2000000000 … &H4EEE6B28 ★ジャスト20億
    2000000128 … &H4EEE6B29
    2000000256 … &H4EEE6B2A
    2000000384 … &H4EEE6B2B


    Single 型で表現可能な 2兆 の周辺値はこんな感じ。

    1999999729664 … &H53E8D4A3
    1999999860736 … &H53E8D4A4
    1999999991808 … &H53E8D4A5 ★2兆マイナス8192
    2000000122880 … &H53E8D4A6 ☆2兆プラス122880
    2000000253952 … &H53E8D4A7
    2000000385024 … &H53E8D4A8
記事No.92856 のレス /過去ログ160より / 関連記事表示
削除チェック/

■96984  Re[3]: 数値書式指定文字列からの変換
□投稿者/ 魔界の仮面弁士 -(2021/03/10(Wed) 22:40:04)
    No96981 (ゆい さん) に返信
    > "8.0355015e-03" の 03 が 05以上になれば変換は出来ないのでしょうか?
    
    変換はできますが、Single 型の精度では物足りないと感じるかもしれません。
    
    
    Single 型の精度においては、下記すべて同一値に変換されます。
    
    Dim x As Single = CSng("8.0355010e-03")
    Dim y As Single = CSng("8.0355015e-03")
    Dim z As Single = CSng("8.0355019e-03")
    
    上記の値は、いずれも下記の 3 の近似値に変換されることになります。
    Single 型でとりえる前後の値も合わせて掲載しておきますね。
    
    0 … 0.008035498671233654022216796875 … 約 0.008035499
    1 … 0.008035499602556228637695312500 … 約 0.0080355
    2 … 0.008035500533878803253173828125 … 約 0.00803550053
    3 … 0.008035501465201377868652343750 … 約 0.008035501
    4 … 0.008035502396523952484130859375 … 約 0.008035502
    5 … 0.008035503327846527099609375000 … 約 0.008035503
    6 … 0.008035504259169101715087890625 … 約 0.008035504
    
    
    
    そもそも、『実際に必要な有効桁数』はどの程度なのでしょうか?
    
    マラソンの距離が 42.195km だからといって、それを「42195000mm」と言い換える事は、
    精度的に不自然なわけです。とはいえ、それで構わないというケースにおいては、
    CDec("8.0355015e-03") を使うという選択肢もあろうかと思います。
    
    ただし Decimal にすると、扱える最大値と最小値は Single よりも狭くなります。
    そのため『有効桁数』だけでなく、『最大値と最小値はどの範囲なのか』も重要になってきます。
    
    
    > 念のためSingleをDoubleに変えても同じでした。
    
    Integer 型で「5.3」や「6.4」を保持しようとしたら、5 や 6 に丸められる事はわかりますよね。
    Integer は、隣り合う数との間隔が常に 1 な型ですので、それより細かい間隔の値を
    保持しようとすれば、整数という近似値に丸められることになります。
    
    
    Single や Double の場合も同様です。連続した値を保持できるわけでは無く、
    有効桁数から外れた値が近似値となります。しかも、その間隔は一定ではなく、
    「0 に近いほど細かく」「0 から離れるほど大雑把」になる仕様です。
    
    
    "8.0355015e-03" の場合、e の前の数値が 8 個あるので、この値の有効桁数は 8 桁ですが、
    話を簡単にするために、ここでは「有効桁数 3 桁」の指数があったとしましょう。
    
    1.22E3 と 1.23E3 の差は、10 ですが
    1.22E7 と 1.23E7 の差は、100000 になります。
    
    1.22E-3 と 1.23E-3 の差は、0.00001 で、
    1.22E-5 と 1.23E-5 の差は、0.0000001 です。
    
    いずれの組み合わせも、「有効桁数 3 桁」の範囲で、隣り合う 2 つの数を比べているだけですが、
    E の後ろの値が大きくなるほど、隣り合う値との差が大きく「荒く」なっており、
    E の後ろの値が小さくなるほど、隣り合う値との差が小さく「細かく」表現できることがわかります。
    
    そのため、演算時に E の後ろの値(指数)が大きく異なる値同士を扱うと、
    有効桁数のうち、実際に使える桁数が狭くなってしまうことに注意してください。
    これは Decimal であっても同じことです。
    
    
       Byte 型の有効桁数は  8 bit なので、10進数換算で  2.40824 桁弱までの精度で扱えます。
    Integer 型の有効桁数は 31 bit なので、10進数換算で  9.33193 桁弱までの精度で扱えます。
     Single 型の有効桁数は 24 bit なので、10進数換算で  7.22472 桁弱までの精度で扱えます。
     Double 型の有効桁数は 53 bit なので、10進数換算で 15.95459 桁弱までの精度で扱えます。
    Decimal 型の有効桁数は 96 bit なので、10進数換算で 28.89888 桁弱までの精度で扱えます。
記事No.96979 のレス /過去ログ168より / 関連記事表示
削除チェック/

■99250  Re[2]: 【C#,VisualStudio2019】フェードアウト処理
□投稿者/ エルデの王 -(2022/02/26(Sat) 18:18:42)
    No99249 (Hongliang さん) に返信
    >> timer.Interval = TimeSpan.FromSeconds(1/60);
    > とりあえずここだけですが。
    > C#は整数同士の演算の結果は整数です。1/60だと端数切捨ての0になってしまいます。
    > 1.0とか、1dとか、(double)1とか、少なくともどちらか片方を浮動小数点数型であることを明示すると、結果も浮動小数点数になります。

    回答ありがとうございます。
    試したところ、塗りつぶし速度が速すぎから遅すぎへと変化しました……。
    ロジックに問題がありそうです。
    問題の一つをご指導頂きありがとうございました。
記事No.99248 のレス /過去ログ172より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -