Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 浮点/双精度文本如何存储在编译的.NET DLL文件中?_C#_.net_Floating Point_Deterministic - Fatal编程技术网

C# 浮点/双精度文本如何存储在编译的.NET DLL文件中?

C# 浮点/双精度文本如何存储在编译的.NET DLL文件中?,c#,.net,floating-point,deterministic,C#,.net,Floating Point,Deterministic,我的应用程序必须在所有机器上产生完全相同的数值结果。我知道C#中的浮点/双精度数学不是确定性的,但文字值的二进制表示如何 float x = 1.23f; 如何将1.23f存储在已编译的DLL文件中?作为32位IEEE-754格式浮点的二进制表示?或者作为一些中间表示,需要通过目标机器上的抖动转换为IEEE-754浮点(潜在的不确定性来源) 我理解为什么C#中的浮点运算是不确定的。我只是问文字的二进制表示是否是确定性的。请不要回答一般的浮点决定论。十进制类型就是出于这个原因引入的。请在这里查看

我的应用程序必须在所有机器上产生完全相同的数值结果。我知道C#中的浮点/双精度数学不是确定性的,但文字值的二进制表示如何

float x = 1.23f;
如何将
1.23f
存储在已编译的DLL文件中?作为32位IEEE-754格式浮点的二进制表示?或者作为一些中间表示,需要通过目标机器上的抖动转换为IEEE-754浮点(潜在的不确定性来源)


我理解为什么C#中的浮点运算是不确定的。我只是问文字的二进制表示是否是确定性的。请不要回答一般的浮点决定论。

十进制类型就是出于这个原因引入的。请在这里查看microsoft官方文档

十进制数是一种浮点值,它由一个符号、一个数值(该数值中的每个数字的范围为0到9)和一个比例因子组成,该比例因子指示分隔数值的整数部分和小数部分的浮动小数点的位置

十进制值的二进制表示法由1位符号、96位整数和用于除以96位整数并指定其中哪部分是小数的比例因子组成。比例因子隐式为数字10,其指数范围为0到28。因此,十进制值的二进制表示形式为((-296到296)/10(0到28)),其中-(296-1)等于MinValue,296-1等于MaxValue。有关十进制值的二进制表示形式和示例的更多信息,请参阅十进制(Int32[])构造函数和GetBits方法

比例因子还保留十进制数中的任何尾随零。尾随零不会影响算术或比较运算中十进制数的值。但是,如果应用了适当的格式字符串,ToString方法可能会显示尾随的零


它们以IEEE 754格式存储

您可以通过使用ILDASM.EXE反汇编生成的代码并检查二进制值来验证这一点

例如,
float x=1.23f将生成:

IL_0000:  /* 22   | A4709D3F         */ ldc.r4     1.23

(请注意,这是以little-endian格式存储在Intel平台上的。)

它们存储为IEEE 754格式。OP询问如何将
float
类型存储在IL中。