Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #37935
| Newsgroups | comp.lang.java.programmer |
|---|---|
| Date | 2018-01-08 04:17 -0800 |
| Message-ID | <0ef8b3c0-e45c-4624-a8b8-2bdc67135380@googlegroups.com> (permalink) |
| Subject | Can Java 8 do exact arithmetic as in C# |
| From | bursejan@gmail.com |
Java 8 has a nice feature, maybe this
isn't known very well. But there are
a couple of new operations in Math:
/**
* Returns the sum of its arguments,
* throwing an exception if the result overflows an {@code int}.
*
* @param x the first value
* @param y the second value
* @return the result
* @throws ArithmeticException if the result overflows an int
* @since 1.8
*/
public static int addExact(int x, int y);
/**
* Returns the sum of its arguments,
* throwing an exception if the result overflows a {@code long}.
*
* @param x the first value
* @param y the second value
* @return the result
* @throws ArithmeticException if the result overflows a long
* @since 1.8
*/
public static long addExact(long x, long y);
Etc..
------------ Arne wrote ---------------
Arne Vajhøj
02:06 (vor 11 Stunden)
Nachricht auf Deutsch übersetzen
On 1/5/2018 2:59 PM, Daniele Futtorovic wrote:
- zitierten Text einblenden -
I like C# with the check enabled.
using System;
namespace E
{
public class Program
{
private static void Avg(int a, int b)
{
Console.WriteLine("Average of {0} and {1} is {2}", a, b, (a
+ b) / 2);
}
public static void Main(string[] args)
{
Avg(123, 456);
Avg(int.MaxValue, int.MaxValue);
Console.ReadKey();
}
}
}
What is best:
Average of 123 and 456 is 289
Average of 2147483647 and 2147483647 is -1
or:
Average of 123 and 456 is 289
System.OverflowException: Arithmetic operation resulted in an overflow.
?
If one really need the integer overflow to work then it is actually
still possible by making it explicit.
(I had big problems coming up with an example where it make sense
to overflow, but ...)
using System;
using System.Text;
namespace E
{
public class Program
{
private static int[] Encrypt(int[] a, int k)
{
int[] res = new int[a.Length];
for(int i = 0; i < res.Length; i++)
{
unchecked
{
res[i] = a[i] + k;
}
}
return res;
}
private static int[] Decrypt(int[] a, int k)
{
return Encrypt(a, -k);
}
private const int KEY = 123456789;
public static void Main(string[] args)
{
int[] a1 = { int.MinValue, -1, 0, 1, int.MaxValue };
int[] a2 = Encrypt(a1, KEY);
int[] a3 = Decrypt(a2, KEY);
for(int i = 0; i < a1.Length; i++)
{
Console.WriteLine("{0} -> {1} -> {2}", a1[i], a2[i],
a3[i]);
}
Console.ReadKey();
}
}
}
works fine even with the check enabled due to the:
unchecked { }
block.
I think this is the right way. Check by default and have a way
to disable the check for specific code sections where it is
needed.
Arne
Back to comp.lang.java.programmer | Previous | Next — Next in thread | Find similar | Unroll thread
Can Java 8 do exact arithmetic as in C# bursejan@gmail.com - 2018-01-08 04:17 -0800
Re: Can Java 8 do exact arithmetic as in C# j4n bur53 <janburse@fastmail.fm> - 2018-01-08 13:21 +0100
Re: Can Java 8 do exact arithmetic as in C# Eric Sosman <esosman@comcast-dot-net.invalid> - 2018-01-08 08:42 -0500
Re: Can Java 8 do exact arithmetic as in C# j4n bur53 <janburse@fastmail.fm> - 2018-01-08 21:11 +0100
Re: Can Java 8 do exact arithmetic as in C# bursejan@gmail.com - 2018-01-08 18:08 -0800
Re: Can Java 8 do exact arithmetic as in C# bursejan@gmail.com - 2018-01-08 18:22 -0800
Re: Can Java 8 do exact arithmetic as in C# v_borchert@despammed.com (Volker Borchert) - 2018-01-09 19:48 +0000
Re: Can Java 8 do exact arithmetic as in C# Arne Vajhøj <arne@vajhoej.dk> - 2018-01-08 20:04 -0500
Re: Can Java 8 do exact arithmetic as in C# bursejan@gmail.com - 2018-01-08 17:53 -0800
csiph-web