【问题标题】:Is there a constant for max/min int/double value in dart?飞镖中的最大/最小 int/double 值是否有常数?
【发布时间】:2018-10-29 23:27:54
【问题描述】:

dart 中是否有一个常数可以告诉我们最大/最小 int/double 值是多少?

类似于double.infinity 的东西,而是double.maxValue

【问题讨论】:

标签: dart


【解决方案1】:

double

double.maxFinite (1.7976931348623157e+308)
double.minPositive (5e-324)

在 Dart 1 中,int 没有这样的数字。整数的大小仅受可用内存的限制

在 Dart 2 中 int 被限制为 64 位,但看起来还没有常量。

对于 dart2js 应用不同的规则

当编译成 JavaScript 时,整数因此被限制为 53 个有效位,因为所有 JavaScript 数字都是双精度浮点值。

【讨论】:

  • 我正准备用这句话回答我自己的问题。谢谢哈哈!
  • 我用的是1<<63,可读性不是很好,但是简洁,一个注释就可以解释了
  • 请注意,1 << 63 不可移植,因为它不适合 Web,Dart 不使用 64 位整数。
【解决方案2】:

我从dart_numerics 包中找到了这个。

【讨论】:

  • 这很好,但没有 Double 的等价物
【解决方案3】:

这里是 int64 最大值:

const int intMaxValue = 9223372036854775807;

对于 dart web 是 2^53-1:

const int intMaxValue = 9007199254740991;

“这个数字背后的原因是 JavaScript 使用 IEEE 754 中指定的双精度浮点格式数字,并且只能安全地表示 -(2^53 - 1) 和 2^53 - 1 之间的整数。”见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER

【讨论】:

  • 我相信 OP 是在询问是否有预定义的常量(例如 C 提供的常量)。
  • 请注意,这不是 Web 的合适最大值,因为 Dart 不使用 64 位整数。
【解决方案4】:

不,

Dart 没有用于int 最大值的内置常量

但这是获取最大值的方法

因为ints 是在 Dart 中签名的,所以如果 32 位和 [-2^31, 2^31 - 1],它们的范围(包括)为 [-2^15, 2^15-1]如果是 64 位。 int 中的第一位称为“符号位”。如果符号位为 1,则int 为负;如果为 0,int 为非负数。在最大int 中,除符号位为 0 外,所有位均为 1。我们可以通过以十六进制表示法编写 int 最容易地实现这一点(以 '0x' 开头的整数是十六进制):

int max = 0x7fffffff; // 32-bit
int max = 0x7fffffffffffffff; // 64-bit

在十六进制(又名十六进制)中,每个十六进制数字指定一组 4 位,因为有 16 个十六进制数字(0-f),有 2 位数字(0-1),并且 2^4 = 16。如果指定的位数多于位数,则会出现编译错误;如果指定的位数少于位数,则十六进制整数将用 0 填充,直到位数为位数。因此,为了表示除符号位之外的所有位都是 1,我们需要使用 bitness / 4 十六进制字符(例如 16 用于 64 位架构)。第一个十六进制字符将表示二进制整数“0111”(7),即0x7,所有其他十六进制字符将表示二进制整数“1111”(15),即0xf

或者,您可以使用位移,我不会解释,但请随意谷歌它。

int bitness = ... // presumably 64
int max = (((1 << (bitness - 2)) - 1) << 1) + 1;

【讨论】:

    猜你喜欢
    • 2013-12-27
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多