如果您的Java方法返回的long
結果在[-9,007,199,254,740,992至9,007,199,254,740,992]的範圍內,那麼您不需要在代碼中執行任何操作。您可以將結果轉換回Matlab的int64
,而不會有任何精度損失。該範圍內的所有整數都可以表示爲double
數字,而不會降低精度,因爲該值可以存儲在64位表示double
值所提供的53位有效二進制數字中。
您可以在第8章的詳細信息(浮點運算),我的書Code Quality: The Open Source Perspective或任何其他教科書覆蓋浮點運算。
下面的程序演示用於在完全表示範圍的端部100個百萬個整數的double
表示的精確度。
#include <stdio.h>
int
main(int argc, char *argv[])
{
int i;
volatile long long n1, n2;
volatile long long p1, p2;
volatile double d;
/* Include one number outside the range, to show that the test works. */
n1 = -9007199254740993ll;
p1 = 9007199254740993ll;
for (i = 0; i < 100000000; i++) {
d = p1;
p2 = d;
if (p1 != p2)
printf("%lld != %lld\n", p1, p2);
d = n1;
n2 = d;
if (n1 != n2)
printf("%lld != %lld\n", n1, n2);
p1--;
n1++;
}
return 0;
}
Yikes,很好的信息。我有一個項目來回傳遞int64s,我需要回來檢查一下! – JonB 2013-05-01 06:53:54
一個想法 - 如果你返回一個java.lang.Long而不是long,你可以(在matlab中)做.toString()並把結果作爲一個字符串,然後轉換回matlab。 – JonB 2013-05-01 07:07:47
即Matlab可以通過使用sscanf(char(wrapperFun()。toString),'%ld')得到int64。 – JonB 2013-05-01 07:23:22