Нет, абсолютно нет.Существует множество значений long
, которые не могут быть точно представлены double
.Фактически, это имеет , чтобы иметь место, учитывая, что оба типа представлены в 64 битах, и, очевидно, существует множество значений double
, которые не могут быть представлены в long
(например, 0,5)
Простой пример (Java и затем C #):
// Java
class Test {
public static void main(String[] args) {
long x = Long.MAX_VALUE - 1;
double d = x;
long y = (long) d;
System.out.println(x == y);
}
}
// C#
using System;
class Test
{
static void Main()
{
long x = long.MaxValue;
double d = x;
long y = (long) d;
Console.WriteLine(x == y);
}
}
Я наблюдал что-то действительно странное , когда делал это, хотя ... в C #, long.MaxValue
"работал"с точки зрения печати False ... тогда как в Java мне пришлось использовать Long.MAX_VALUE - 1
.Я предполагаю, что это происходит из-за некоторых встроенных и 80-битных операций с плавающей точкой в некоторых случаях ... но это все еще странно:)