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