Visual Studio 2010 Part21 (288レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

257
(1): デフォルトの名無しさん [sage] 2021/11/10(水) 08:39:33.56 ID:gxiWSUFZ(1/5) AAS
質問主です。
いいえ、皆さんの意見は参考になっています。ありがとうございます。

ソースコード全部は難しいので、現象を簡略化してみました。
C.dllに次の関数を用意し、A、Bから呼び出しました。
public static int test()
{
string tmpStr = "";
tmpStr += "Math.sqrt(2f) = " + System.Math.Sqrt(2.0f).ToString() + "\n";
tmpStr += "Math.sqrt(2d) = " + System.Math.Sqrt(2.0d).ToString() + "\n";
string tmpFileName = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "debug.txt");
System.IO.File.WriteAllText(tmpFileName, tmpStr);
return 1;
}
結果は次の通りです。
A:
Math.sqrt(2f) = 1.41421353816986
Math.sqrt(2d) = 1.41421353816986
B:
Math.sqrt(2f) = 1.4142135623731
Math.sqrt(2d) = 1.4142135623731
A、Bと引数、結果のやり取りをしていないので、無意識の型変換はされていないと思うのですが、
見逃している点があるのでしょうか。
261: デフォルトの名無しさん [sage] 2021/11/10(水) 12:26:40.94 ID:gxiWSUFZ(2/5) AAS
MathF、Aの結果がfloat、いろいろご助言ありがとうございます。
MathFについては、私も調べてみたのですが、.NETのVer.5から追加されており、
今使っているVS2010の.NET Ver.4では実装されていないようです。
とはいえ核心に近づいていると感じますので、同様の問題に引っかかっていないか、
調べています。
262
(1): デフォルトの名無しさん [sage] 2021/11/10(水) 12:38:22.20 ID:gxiWSUFZ(3/5) AAS
呼び出し方については、下記まで簡略化しました。
A,Bとも(BはFormAとFormBと読み替え)
namespace WindowsApplication1
{
 public partial class FormA:Form
 {
  public FormA()
  {
   InitializeComponent();
   tlib.tcls.test();
  }
 }
}
C.dllは
namespace tlib
{
 public static class tcls
 {
  public static int test()
  {
   >>257と同じ
  }
 }
}
A、BともC.dllをソリューションエクスプローラーの「参照設定」から追加しました。
265: デフォルトの名無しさん [sage] 2021/11/10(水) 15:01:00.72 ID:gxiWSUFZ(4/5) AAS
全ソースを準備している途中で、どこかの段階でAの結果がBと一致するようになりました。
ありがとうございます。ここまでくれば徐々にAを戻していって、自力で原因に
たどり着けそうです。皆様の助言のおかげです。
268: デフォルトの名無しさん [sage] 2021/11/10(水) 16:44:46.75 ID:gxiWSUFZ(5/5) AAS
質問主です。
原因は、ネットから落として来たフリーのDirectX関係のライブラリでした。
このライブラリの初期化前に実行するとSystem.Math.Sqrtは正しい(doubleの)
答えを返します。回避策としてSystem.Math.Powを使えそうです。
このライブラリがSystem.Mathに影響を与えるはずがない、と思い込んでいた私が
間違っておりました。
皆様のご助言、大変助かりました。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.010s