隐式转换和数量级

本文关键字:数量级 转换 | 更新日期: 2023-09-27 18:24:38

在C#标准中称为:

从int、uint、long或ulong到float以及从long或ulong加倍可能会导致精度损失,但永远不会导致幅度损失

有人能解释一下震级是什么意思吗?并且给定一个数字我怎样才能计算它的大小?(即longint)。

隐式转换和数量级

例如:

var a = Int64.MaxValue; // a = 9223372036854775807L
var b = (float)a; // b = 9.223372037e+18

a和b有相同的数量级,它们非常接近,但它们不相等。。。

基本长(Int64)可以在一定范围内精确地表示整数。浮点类型牺牲了精度,因此它们可以表示更大范围的数字,也可以表示分数。因此,.net中的所有积分类型都将适合范围意义上的浮点,但你可能会错过精度(小数点后的数字可能不正确。但数字的"小数位数"(数量级)及其一些更有效的数字将被保留。。。

https://en.wikipedia.org/wiki/Order_of_magnitude

似乎不清楚您引用的规范所指的"数量级"是什么,实际上可能应该是"数量级的"。

由于Dictionary.com将"幅度"定义为:

一个具有量特征的数,并构成与类似数量的比较,如长度。

维基百科的定义是:

任何数字的大小通常被称为其"绝对值"或"模量",用|x|表示。

您可能会得出这样的结论:spec表示的是变量所代表的数量或实际值。然而,正如其他人在这里适当指出的那样,情况并非如此。

通过运行一个简单的测试(就像这里的其他测试一样),这个事实变得显而易见:

long x = 8223372036854775807; // arbitrary long number
double y = x; // implicit conversion to double
long z = Convert.ToInt64(y); // convert back to int64 (a.k.a. long)
System.Diagnostics.Debug.Print(x.ToString());
System.Diagnostics.Debug.Print(z.ToString());

这会产生输出:

8223372036854775807

8223372036854775808

因此,从中可以看出,该规范虽然模糊且不精确,但并不是指字典或维基百科中定义的"数量级"的定义,而是更接近于"数量阶"的定义。具体而言:

数量级以10 的幂书写

数量级用于进行近似比较。

两个数量级相同的数字具有大致相同的比例。

这符合所讨论的C#规范,也符合我们从测试中看到的结果。