الفرق بين المراجعتين لصفحة: «Ruby/Float/next float»
جميل-بيلوني (نقاش | مساهمات) إنشاء الصفحة. |
جميل-بيلوني (نقاش | مساهمات) |
||
(1 مراجعات متوسطة بواسطة نفس المستخدم غير معروضة) | |||
سطر 3: | سطر 3: | ||
[[تصنيف: Ruby Method]] | [[تصنيف: Ruby Method]] | ||
[[تصنيف: Ruby Float]] | [[تصنيف: Ruby Float]] | ||
يعيد التابع <code>next_float</code> العدد | يعيد التابع <code>next_float</code> العدد العشري الذي يلي العدد العشري الذي استُدعي معه. | ||
استدعاء التابع <code>next_float</code> مع القيمة الثابتة <code>Float::MAX</code> و <code>Float::INFINITY</code> يعيد القيمة <code>Float::INFINITY</code> الثابتة. | |||
استدعاء التابع بالشكل <code>Float::NAN.next_float</code> يعيد القيمة <code>Float::NAN</code>. | |||
==البنية العامة== | ==البنية العامة== | ||
<syntaxhighlight lang="ruby"> | <syntaxhighlight lang="ruby">next_float → float</syntaxhighlight> | ||
==القيمة المعادة== | ==القيمة المعادة== | ||
يعاد | يعاد العدد العشري الذي يلي العدد العشري المعطى. | ||
==أمثلة== | ==أمثلة== | ||
مثال على استخدام التابع <code> | مثال على استخدام التابع <code>next_float</code>: | ||
<syntaxhighlight lang="ruby">1. | <syntaxhighlight lang="ruby">0.01.next_float #=> 0.010000000000000002 | ||
1.0.next_float #=> 1.0000000000000002 | |||
1. | 100.0.next_float #=> 100.00000000000001 | ||
(- | |||
0.01.next_float - 0.01 #=> 1.734723475976807e-18 | |||
1.0.next_float - 1.0 #=> 2.220446049250313e-16 | |||
100.0.next_float - 100.0 #=> 1.4210854715202004e-14 | |||
f = 0.01; 20.times { printf "%-20a %s\n", f, f.to_s; f = f.next_float } | |||
#=> 0x1.47ae147ae147bp-7 0.01 | |||
# 0x1.47ae147ae147cp-7 0.010000000000000002 | |||
# 0x1.47ae147ae147dp-7 0.010000000000000004 | |||
# 0x1.47ae147ae147ep-7 0.010000000000000005 | |||
# 0x1.47ae147ae147fp-7 0.010000000000000007 | |||
# 0x1.47ae147ae148p-7 0.010000000000000009 | |||
# 0x1.47ae147ae1481p-7 0.01000000000000001 | |||
# 0x1.47ae147ae1482p-7 0.010000000000000012 | |||
# 0x1.47ae147ae1483p-7 0.010000000000000014 | |||
# 0x1.47ae147ae1484p-7 0.010000000000000016 | |||
# 0x1.47ae147ae1485p-7 0.010000000000000018 | |||
# 0x1.47ae147ae1486p-7 0.01000000000000002 | |||
# 0x1.47ae147ae1487p-7 0.010000000000000021 | |||
# 0x1.47ae147ae1488p-7 0.010000000000000023 | |||
# 0x1.47ae147ae1489p-7 0.010000000000000024 | |||
# 0x1.47ae147ae148ap-7 0.010000000000000026 | |||
# 0x1.47ae147ae148bp-7 0.010000000000000028 | |||
# 0x1.47ae147ae148cp-7 0.01000000000000003 | |||
# 0x1.47ae147ae148dp-7 0.010000000000000031 | |||
# 0x1.47ae147ae148ep-7 0.010000000000000033 | |||
f = 0.0 | |||
100.times { f += 0.1 } | |||
f #=> 9.99999999999998 # should be 10.0 in the ideal world. | |||
10-f #=> 1.9539925233402755e-14 # the floating point error. | |||
10.0.next_float-10 #=> 1.7763568394002505e-15 # 1 ulp (unit in the last place). | |||
(10-f)/(10.0.next_float-10) #=> 11.0 # the error is 11 ulp. | |||
(10-f)/(10*Float::EPSILON) #=> 8.8 # approximation of the above. | |||
"%a" % 10 #=> "0x1.4p+3" | |||
"%a" % f #=> "0x1.3fffffffffff5p+3" # the last hex digit is 5. 16 - 5 = 11 ulp.</syntaxhighlight> | |||
==انظر أيضا== | ==انظر أيضا== | ||
* التابع <code>[[Ruby/Float/ | * التابع <code>[[Ruby/Float/prev float|prev_float]]</code>: يعيد العدد العشري الذي يسبق العدد العشري الذي استُدعي معه. | ||
==مصادر== | ==مصادر== | ||
*[http://ruby-doc.org/core-2.5.1/ | *[http://ruby-doc.org/core-2.5.1/Float.html#method-i-next_float قسم التابع next_float في الصنف Float في توثيق روبي الرسمي.] |
المراجعة الحالية بتاريخ 07:27، 24 نوفمبر 2018
يعيد التابع next_float
العدد العشري الذي يلي العدد العشري الذي استُدعي معه.
استدعاء التابع next_float
مع القيمة الثابتة Float::MAX
و Float::INFINITY
يعيد القيمة Float::INFINITY
الثابتة.
استدعاء التابع بالشكل Float::NAN.next_float
يعيد القيمة Float::NAN
.
البنية العامة
next_float → float
القيمة المعادة
يعاد العدد العشري الذي يلي العدد العشري المعطى.
أمثلة
مثال على استخدام التابع next_float
:
0.01.next_float #=> 0.010000000000000002
1.0.next_float #=> 1.0000000000000002
100.0.next_float #=> 100.00000000000001
0.01.next_float - 0.01 #=> 1.734723475976807e-18
1.0.next_float - 1.0 #=> 2.220446049250313e-16
100.0.next_float - 100.0 #=> 1.4210854715202004e-14
f = 0.01; 20.times { printf "%-20a %s\n", f, f.to_s; f = f.next_float }
#=> 0x1.47ae147ae147bp-7 0.01
# 0x1.47ae147ae147cp-7 0.010000000000000002
# 0x1.47ae147ae147dp-7 0.010000000000000004
# 0x1.47ae147ae147ep-7 0.010000000000000005
# 0x1.47ae147ae147fp-7 0.010000000000000007
# 0x1.47ae147ae148p-7 0.010000000000000009
# 0x1.47ae147ae1481p-7 0.01000000000000001
# 0x1.47ae147ae1482p-7 0.010000000000000012
# 0x1.47ae147ae1483p-7 0.010000000000000014
# 0x1.47ae147ae1484p-7 0.010000000000000016
# 0x1.47ae147ae1485p-7 0.010000000000000018
# 0x1.47ae147ae1486p-7 0.01000000000000002
# 0x1.47ae147ae1487p-7 0.010000000000000021
# 0x1.47ae147ae1488p-7 0.010000000000000023
# 0x1.47ae147ae1489p-7 0.010000000000000024
# 0x1.47ae147ae148ap-7 0.010000000000000026
# 0x1.47ae147ae148bp-7 0.010000000000000028
# 0x1.47ae147ae148cp-7 0.01000000000000003
# 0x1.47ae147ae148dp-7 0.010000000000000031
# 0x1.47ae147ae148ep-7 0.010000000000000033
f = 0.0
100.times { f += 0.1 }
f #=> 9.99999999999998 # should be 10.0 in the ideal world.
10-f #=> 1.9539925233402755e-14 # the floating point error.
10.0.next_float-10 #=> 1.7763568394002505e-15 # 1 ulp (unit in the last place).
(10-f)/(10.0.next_float-10) #=> 11.0 # the error is 11 ulp.
(10-f)/(10*Float::EPSILON) #=> 8.8 # approximation of the above.
"%a" % 10 #=> "0x1.4p+3"
"%a" % f #=> "0x1.3fffffffffff5p+3" # the last hex digit is 5. 16 - 5 = 11 ulp.
انظر أيضا
- التابع
prev_float
: يعيد العدد العشري الذي يسبق العدد العشري الذي استُدعي معه.