有人可以幫我解決這個問題嗎,在 Perl 編程語言中找不到有關浮點域的任何資訊?
uj5u.com熱心網友回復:
對于 x86 或 x64 的構建,perl極少會發現任何偏離以下內容的內容:
- 它們可以表示大到 ≈ ±1.7976931348623157 × 10 308的數字。
- 它們可以表示小至 ≈ ±4.9406564584124654 × 10 -324的數字。
- 它們具有 53 位(≈ 16 位)的精度。[1]。
- 它們可以無損失地表示不超過 ±2 53 (±9,007,199,254,740,992) 的所有整數。
Perl 通常使用 C double,盡管我相信在構建 Perl 時可以更改它。
在 x86 或 x64 上, adouble是一個IEEE 雙精度浮點數[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
這些變數可通過Config 模塊%Config提供的散列供程式使用。
nv_overflows_integers_at比不能用浮點數表示的最小整數小一。可以表示更大的整數(有些有精度損失,有些沒有精度損失),但是直到這個數字的每個整數都可以在不損失精度的情況下表示(在正和負方面)。
- 最小的數字(“次正規數”)只有 52 位精度。
- C 編譯器可以制作
double別的東西,但這沒有意義。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/425530.html
標籤:perl
