我一直看到人们在C#中使用双打.我知道我读到某个地方,双打有时会失去精确度.我的问题是什么时候应该使用双倍,何时应该使用小数类型?哪种类型适合货币计算?(即超过1亿美元)
你如何向仍然认为计算机是无限智能和准确的新鲜程序员和外行人解释浮点不准确?
你有一个最喜欢的例子或轶事似乎比一个精确但干燥的解释更好地理解这个想法吗?
这是如何在计算机科学课程中教授的?
这是这个问题的后续问题:为什么除法结果会根据演员类型而有所不同?
快速摘要:
byte b1 = (byte)(64 / 0.8f); // b1 is 79
int b2 = (int)(64 / 0.8f); // b2 is 79
float fl = (64 / 0.8f); // fl is 80
Run Code Online (Sandbox Code Playgroud)
问题是:为什么结果会根据演员类型而有所不同?在制定答案的过程中遇到了一个我无法解释的问题.
var bytes = BitConverter.GetBytes(64 / 0.8f).Reverse(); // Reverse endianness
var bits = bytes.Select(b => Convert.ToString(b, 2).PadLeft(8, '0'));
Console.WriteLine(string.Join(" ", bits));
Run Code Online (Sandbox Code Playgroud)
这输出如下:
01000010 10100000 00000000 00000000
Run Code Online (Sandbox Code Playgroud)
以IEEE 754格式分解:
0 10000101 01000000000000000000000
Run Code Online (Sandbox Code Playgroud)
标志:
0 => Positive
Run Code Online (Sandbox Code Playgroud)
指数:
10000101 => 133 in base 10
Run Code Online (Sandbox Code Playgroud)
尾数:
01000000000000000000000 => 0*2^-1 + …Run Code Online (Sandbox Code Playgroud)