如何用整数过滤掉浮点数[逻辑]
How do I filter out floats with integers [logic]
我有一组浮点数。其中一些浮点数非常接近整数,但它们仍然是浮点数。我需要过滤这些值。
例如:
array_n = [n]; //一个浮点数数组
k = 160。
在if循环中,n是array_n中的一个元素。我需要使用 k 从数组中选择 n。我已经尝试过 n%k <= k,但是没有用。我尝试通过执行 n%1 <= .000000001 来过滤掉接近整数的数字,但是当我执行 n%1 时,某些值出现了 1(我真的不确定为什么或如何)。
有什么想法吗?
我正在使用 MATLAB,但我认为该问题适用于任何语言。
设 x 为最接近整数的四舍五入数。
如果 abs(x - number) < threshold,那么这个数字是一个整数。
我打算使用 C#,因为这是我所知道的,抱歉:
bool IsIntegerish(float f)
{
const float epsilon = 0.000000001; // using epsilon from OP
return abs(f - (int)f) < epsilon;
}
用作(无论如何在 C# 中)为:
foreach (var i in myFloats.Where(f => !IsIntegerish(f)))
{
// do something useful
}
您可能应该使用相对容错而不是绝对容错:
tolerance = 1e-3;
a( abs(a-round(a)) < tolerance*(eps(a)/eps) )
我有一组浮点数。其中一些浮点数非常接近整数,但它们仍然是浮点数。我需要过滤这些值。
例如:
array_n = [n]; //一个浮点数数组 k = 160。
在if循环中,n是array_n中的一个元素。我需要使用 k 从数组中选择 n。我已经尝试过 n%k <= k,但是没有用。我尝试通过执行 n%1 <= .000000001 来过滤掉接近整数的数字,但是当我执行 n%1 时,某些值出现了 1(我真的不确定为什么或如何)。
有什么想法吗?
我正在使用 MATLAB,但我认为该问题适用于任何语言。
设 x 为最接近整数的四舍五入数。
如果 abs(x - number) < threshold,那么这个数字是一个整数。
我打算使用 C#,因为这是我所知道的,抱歉:
bool IsIntegerish(float f)
{
const float epsilon = 0.000000001; // using epsilon from OP
return abs(f - (int)f) < epsilon;
}
用作(无论如何在 C# 中)为:
foreach (var i in myFloats.Where(f => !IsIntegerish(f)))
{
// do something useful
}
您可能应该使用相对容错而不是绝对容错:
tolerance = 1e-3;
a( abs(a-round(a)) < tolerance*(eps(a)/eps) )