当前位置: 首页 > 面试题库 >

给定数字位于哪个段中?[重复]

汪耀
2023-03-14
问题内容

假设具有n(整数)个长度l(浮点)的连续段。那是:

Segment 0 = [0, l)
Segment 1 = [l, 2*l)
Segment 2 = [2*l, 3*l)
... 
Segment (n-1) = [(n-1)*l, n*l)

给定一个数字x(浮点数),我想确定其位于其中的段的ID。

我的第一个想法是:

int segmentId = (int) floor(x/l);

无论如何,这有时不起作用。例如,考虑

double l = 1.1;
double x = 5.5;
int segmentId = (int) floor(x/l); //returns 5


double l = 1.1;
double x = 6.6;
int segmentId = (int) floor(x/l); //returns 5!!!

当然,由于有限的算术,这不能很好地工作。可能需要一些额外的检查才能具有可靠的实现,但是我真的不知道如何进一步进行。

问题是: 您将如何解决“给定数字位于哪个细分市场”的问题?


问题答案:

您的问题是1.1,或6.6都无法在二进制浮点中精确表示。所以当你输入

double l = 1.1;
double x = 6.6;

您将获得2个存储在l和中的数字x,它们与1.1和略有不同6.6。之后,int segmentId = (int) floor(x/l);为那些稍有不同的数字确定正确的段,而不是为原始数字确定正确的段。

您可以通过使用十进制浮点数据类型而不是二进制来解决此问题。您可以检查C
十进制数据类型和C 的精确十进制数据类型吗?库,或者自己实现十进制数据类型。

但是对于数字,仍然存在问题,这些数字在有限的十进制浮点数中无法表示,例如1/3(循环分数),sqrt(2)(无理),pi(超越)等。



 类似资料:
  • 我有一个从我的供应商products下载的文件。xml。我有一个脚本从这个文件中获取数据并将其放入csv文件中。 所以我正在看这个脚本,似乎有从xml中提取的数据,我在任何xml编辑器中都看不到。比如图像和类别。另一方面,我看到xml文件中的某些字段在应该放在csv中的时候没有放在csv中,比如产品名称。 除了添加产品名称和描述之外,它做的一切都是正确的。 这里是脚本将数据从xml抓取到数组中的地

  • 确定给定段落中每个字符的频率数。

  • 我目前有一个数字列表,我想知道这些数字中的哪些在一定范围内,以及它们在列表中的位置是什么。 我对巴黎相当陌生,所以我不知道该怎么做。 举一个简单的例子来说明我在做什么: 查找位于 0.05 和 0.15 范围内的数字 1 到 20 的逆函数 我列了一个清单,像这样: 从这里,我想要所有i的列表,以便A[i]在该范围内。 但我不知道如何从这里开始。我尝试了一些简单的if/for语句,但这些都不起作用

  • 问题内容: 我目前正在用Java开发程序,仅当用户同时用鼠标左键和右键单击时,才必须触发特定事件。 由于这有点不合常规,因此我决定首先进行测试。这里是: 我对其进行了测试,并且可以正常工作,但是存在问题。 如您所见,鼠标左键由表示,鼠标右键由表示。 如果用户的鼠标没有滚轮(显然仍然存在此类鼠标),则在MouseEvent中仅设置两个按钮。这是否意味着右键将由代替?如果是,如何更改代码以适应此要求?

  • 几个月前,我参加了纽约一家对冲基金公司的面试,不幸的是,我没有得到数据/软件工程师的实习机会。(他们还要求解决方案使用Python。) 我在第一个面试问题上搞砸了... 000-->999 现在我在考虑,我认为不可能想出一个常数时间的算法。是吗?

  • 问题内容: 我无法弄清楚哪个当前处于活动状态,因此如果它们在上单击“取消”,则可以清除其文本。这是我的代码。有一个视图,和两个栏按钮的项目。取消项的操作只能清除其文本,我无法弄清楚如何获得正确的文本。 我都尝试过这两个: 和: 问题答案: 您可以在类中声明一个属性,然后在中为它分配当前文本字段。然后,您可以在需要时随时调用此文本字段。

  • 我正在尝试确定在一个等距2D游戏中鼠标位于哪个精灵上方。我认为我的最佳选择是将每个精灵绘制成不同的颜色,并将其转换为纹理2D,此时我可以从鼠标点获取颜色数据,并对照绘制的精灵进行检查。 但是,这种方法存在的问题是,我无法将单个精灵的颜色更改为纯色。如果我更改了spriteBatch中的颜色。绘制调用,它只着色精灵的颜色,而不是以纯色绘制,因此我从纹理中检索的数据没有帮助。 在用纯色绘制这些精灵方面

  • 问题内容: 我正在将Go语言和MongoDB与驱动程序一起使用,并且我的结构像 我需要找到所有的地方,例如。目前,我加载了所有内容,然后在Go代码中进行了过滤,但是我想在查询级别进行过滤。 如何进行查询? 此刻我归还 在这里我在for循环中过滤了Go代码,但这不是最佳选择(这是不好的解决方案)。 问题答案: 要查找所有位置,您可以使用: 这是工作代码: 输出: