Perl 浮点数有什么域?
What domain does the Perl floating point have?
谁能帮我解决这个问题,在 Perl 编程语言中找不到任何关于浮点域的信息?
对于 x86 或 x64 的 perl
版本,很少能找到与以下内容不同的内容:
- 它们可以表示大至 ≈ ±1.7976931348623157 × 10308.
- 它们可以表示小至 ≈ ±4.9406564584124654 × 10−324.
的数字
- 它们有 53 位(≈ 16 位)的精度。[1]。
- 它们可以无损地表示最大为 ±253 (±9,007,199,254,740,992) 的所有整数。
Perl 通常使用 C double
,但我相信在构建 Perl 时可以更改。
在 x86 或 x64 上,double
是 IEEE double-precision floating-point number[2],它提供 53 位精度(将近 16 位)。
信息由perl
提供:
$ perl -V:nvtype
nvtype='double';
$ perl -V:nvsize
nvsize='8';
$ perl -V:nv_preserves_uv_bits
nv_preserves_uv_bits='53';
$ perl -V:nv_overflows_integers_at
nv_overflows_integers_at='256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0';
$ perl -Mv5.10 -MConfig -e'say eval $Config{nv_overflows_integers_at}'
9007199254740992
程序可以通过 the Config module 提供的 %Config
散列来使用这些变量。
nv_overflows_integers_at
比不能用浮点数表示的最小整数小一。可以表示更大的整数(有些有精度损失,有些没有精度损失),但是可以表示不超过此数字的每个整数而不会损失精度(在正负端)。
- 最小的数字(“次正规数”)只有 52 位精度。
- C 编译器可以生成
double
其他内容,但这没有意义。
谁能帮我解决这个问题,在 Perl 编程语言中找不到任何关于浮点域的信息?
对于 x86 或 x64 的 perl
版本,很少能找到与以下内容不同的内容:
- 它们可以表示大至 ≈ ±1.7976931348623157 × 10308.
- 它们可以表示小至 ≈ ±4.9406564584124654 × 10−324. 的数字
- 它们有 53 位(≈ 16 位)的精度。[1]。
- 它们可以无损地表示最大为 ±253 (±9,007,199,254,740,992) 的所有整数。
Perl 通常使用 C double
,但我相信在构建 Perl 时可以更改。
在 x86 或 x64 上,double
是 IEEE double-precision floating-point number[2],它提供 53 位精度(将近 16 位)。
信息由perl
提供:
$ perl -V:nvtype
nvtype='double';
$ perl -V:nvsize
nvsize='8';
$ perl -V:nv_preserves_uv_bits
nv_preserves_uv_bits='53';
$ perl -V:nv_overflows_integers_at
nv_overflows_integers_at='256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0';
$ perl -Mv5.10 -MConfig -e'say eval $Config{nv_overflows_integers_at}'
9007199254740992
程序可以通过 the Config module 提供的 %Config
散列来使用这些变量。
nv_overflows_integers_at
比不能用浮点数表示的最小整数小一。可以表示更大的整数(有些有精度损失,有些没有精度损失),但是可以表示不超过此数字的每个整数而不会损失精度(在正负端)。
- 最小的数字(“次正规数”)只有 52 位精度。
- C 编译器可以生成
double
其他内容,但这没有意义。