Determine if a string is numeric: Difference between revisions
Content added Content deleted
(→{{header|Bracmat}}: Removed the part about Bracmat not doing FP, because now (2023) it does.) |
(→{{header|Bracmat}}: Removed the part about converting floating point numbers to rational numbers.) |
||
Line 1,515: | Line 1,515: | ||
S</syntaxhighlight> |
S</syntaxhighlight> |
||
Calculations with floating point numbers are delegated to UFP (Un-I-fancy-fied Floating Point, because it took me 30 years to dream up a viable way to do FP in Bracmat without breaking existing code) objects. An UFP object compiles and executes code that only handles C "doubles" and (multidimensional) arrays of such values. |
|||
To do computations with such "floating point strings" you would have to convert such strings to fractional representations first. |
|||
<syntaxhighlight lang="bracmat">(float2fraction= |
|||
integerPart decimalPart d1 dn exp sign |
|||
. @( !arg |
|||
: ~/#?integerPart |
|||
( &0:?decimalPart:?d1:?dn |
|||
| "." |
|||
[?d1 |
|||
(|? 0|`) |
|||
( &0:?decimalPart |
|||
| ~/#?decimalPart:>0 |
|||
) |
|||
[?dn |
|||
) |
|||
( &0:?exp |
|||
| (E|e) ~/#?exp |
|||
) |
|||
) |
|||
& ( !integerPart*(-1:?sign):>0:?integerPart |
|||
| 1:?sign |
|||
) |
|||
& !sign*(!integerPart+!decimalPart*10^(!d1+-1*!dn))*10^!exp |
|||
); |
|||
( out$float2fraction$"1.2" |
|||
& out$float2fraction$"1.02" |
|||
& out$float2fraction$"1.01" |
|||
& out$float2fraction$"10.01" |
|||
& out$float2fraction$"10.01e10" |
|||
& out$float2fraction$"10.01e1" |
|||
& out$float2fraction$"10.01e2" |
|||
& out$float2fraction$"10.01e-2" |
|||
& out$float2fraction$"-10.01e-2" |
|||
& out$float2fraction$"-10e-2" |
|||
& out$float2fraction$"0.000" |
|||
); |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre>6/5 |
|||
51/50 |
|||
101/100 |
|||
1001/100 |
|||
100100000000 |
|||
1001/10 |
|||
1001 |
|||
1001/10000 |
|||
-1001/10000 |
|||
-1/10 |
|||
0</pre> |
|||
=={{header|Burlesque}}== |
=={{header|Burlesque}}== |