Test integerness: Difference between revisions
No edit summary |
(Make a sentence for the extra credit description) |
||
Line 5: | Line 5: | ||
To be clear, we're not talking about whether the number is stored with the specific data type for integers, but instead we want to test whether there exists an integer with the exact same value. In other words, we want to test for integerness in the mathematical sense, not as a data type. |
To be clear, we're not talking about whether the number is stored with the specific data type for integers, but instead we want to test whether there exists an integer with the exact same value. In other words, we want to test for integerness in the mathematical sense, not as a data type. |
||
⚫ | |||
''Extra credit'' |
|||
⚫ | |||
Revision as of 08:13, 22 June 2014
Given a real numeric value, test whether or not it is an integer.
To be clear, we're not talking about whether the number is stored with the specific data type for integers, but instead we want to test whether there exists an integer with the exact same value. In other words, we want to test for integerness in the mathematical sense, not as a data type.
For extra credit, extend the test for complex numbers. Remember that Failed to parse (SVG (MathML can be enabled via browser plugin): Invalid response ("Math extension cannot connect to Restbase.") from server "https://wikimedia.org/api/rest_v1/":): {\displaystyle \mathbf{Z}\subset\mathbf{C}} .
J
<lang J>(= <.) 3.14 7</lang>
- Output:
0 1
Perl 6
<lang perl6>say pi.narrow ~~ Int; say 1e5.narrow ~~ Int;</lang>
- Output:
False True
Python
<lang python>>>> def isint(f):
return int(f) == f
>>> isint(3.14) False >>> isint(3.0) True >>> </lang>
REXX
<lang rexx>/* REXX ---------------------------------------------------------------
- 20.06.2014 Walter Pachl
- zero and negative whole numbers are integers, right?
- --------------------------------------------------------------------*/
Call test_integer 3.14 Call test_integer 1.00000 Call test_integer 33 Call test_integer 999999999 Call test_integer 99999999999 Call test_integer 1e272 Call test_integer 'AA' Call test_integer '0' Call test_integer '-3' Exit test_integer: Parse Arg x Numeric Digits 1000 Select
When datatype(x)<>'NUM' Then Say x 'is not an integer (not even a number)' /*********************************************** When x=0 Then Say x 'is zero and thus not an integer' When x<0 Then Say x 'is negative and thus not an integer' ***********************************************/ Otherwise Do If datatype(x,'W') Then Say x 'is an integer' Else Say x 'isnt an integer' End End
Return </lang> output
3.14 isn't an integer 33 is an integer 1.00000 is an integer 999999999 is an integer 99999999999 is an integer 1E272 is an integer AA is not an integer (not even a number) 0 is an integer -3 is an integer
Tcl
The simplest method of doing this is testing whether the value is equal to the value after casting it to a integral value. <lang tcl>proc isNumberIntegral {x} {
expr {$x == entier($x)}
} foreach x {3.14 7 1000000000000000000000} {
puts [format "%s: %s" $x [expr {[isNumberIntegral $x] ? "yes" : "no"}]]
}</lang>
- Output:
3.14: no 7: yes 1000000000000000000000: yes