如何将浮点数转换为分数?

2024-01-17

这是一个家庭作业问题。我想编写一个函数将浮点数转换为一对整数:分子和分母。例如:float 0.5 应转换为(1,2)。

我正在尝试。 (见下文)但坦率地说,它对我来说看起来不太好。

// f is the input float
int n = 1
while(fractional_part(f) > 0)
    f *= 10;
    n++
int m = f;
gcd = gcd(m, n)
return (m/gcd, n/gcd)

如何将浮点数转换为分数?


你可以只使用分数库 http://docs.python.org/library/fractions.html.

但是,如果您想开发该算法,这里有一个建议:



from math import floor
from fractions import gcd

def func(v, tol=1e-4):
    """
    Don't handle negative values.
    Use binary search to find the fraction of a float.
    The algorithm is based in a very simple theorem: If a < b then a < (a+b)/2 < b.
    """
    f = v - floor(v)
    lo = (0, 1)
    hi = (1, 1)
    while True:
        # mid = (lo + hi)/2
        # if lo = a/b and hi = c/d, then mid = (ad+bc)/(2ad)
        mid = (lo[0]*hi[1] + hi[0]*lo[1], 2*lo[1]*hi[1])
        # gcd to reduce fraction
        k = gcd(mid[0], mid[1])
        mid = (mid[0]/k, mid[1]/k)

        d = 1.*mid[0]/mid[1]
        # are we close enough?
        if abs(f - d) < tol:
            break
        # if we are above our goal, get high to middle
        elif d > f:
            hi = mid
        # if we are under our goal, get lower to middle
        else:
            lo = mid
    # Add integer part
    mid = (mid[0] + int(floor(v))*mid[1], mid[1])
    # Debug comparing to Fraction library solution.
    #print v, mid, Fraction('%s' % v)
    return mid
  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将浮点数转换为分数? 的相关文章

  • 用于基本要素匹配的最坏情况 NlogN 算法

    查找两个相同大小数组的元素之间的唯一映射 https stackoverflow com questions 4411940 find the unique mapping between elements of two same size
  • 识别鼠标移动的算法

    我想知道是否有任何研究 算法可以指定鼠标在识别 等字符时的偏差量使用鼠标绘制 某种光学字符识别 但可能是一个更简单的版本 是否有某种算法可以让我说用户绘制的问号确实是一个问号 而不是其他具有一定准确性的东西 就像 Windows 平板电脑软
  • 趋势线的最佳拟合曲线

    问题约束 数据集的大小是已知的 但数据本身并不已知 数据集每次增长一个数据点 趋势线一次绘制一个数据点 使用样条 贝塞尔曲线 Graphs 下面的拼贴画显示了具有相当准确的趋势线的数据集 这些图表是 左上 按小时计算 大约有 24 个数据点
  • 快速排序应用程序中这些交换代码行的目的是什么?

    我试图理解快速排序的实现或应用程序以找到第 k 个最小元素 这是我试图理解的代码 public int quicksort int a int start int end int k if start lt end int pivot pa
  • 计算具有 3 个循环的算法的复杂度

    我尝试解决以下练习 以下代码片段最坏情况运行时间的增长顺序是什么 作为 N 的函数 int sum 0 for int i 1 i lt N i for int j 1 j lt i i j for int k 1 k lt j j k s
  • Google 文档如何处理编辑冲突?

    我一直在尝试编写自己的 Javascript 编辑器 其功能类似于 Google Docs 允许多人同时使用 我不明白一件事 假设用户 A 和用户 B 直接相互连接 网络延迟为 10 毫秒 我假设编辑器使用 diff 系统 据我了解 Doc
  • 神经网络的层和神经元

    我想更多地了解神经网络 我正在开发一个 C 程序来制作神经网络 但我坚持使用反向传播算法 很抱歉没有提供一些工作代码 我知道有很多库可以用多种语言创建神经网络 但我更喜欢自己制作一个 关键是我不知道要实现特定目标 例如模式识别或函数近似或其
  • 在 3d 网格中转发(绘制)线

    我需要类似 Bresenham 算法的东西 但是 对于 3d 网格空间来说不完全是这样 我需要 3d 单元网格 边缘尺寸 1 0 从 S 点开始 前进到 K 点 接触 该线接触的所有单元格 即使只有边缘 点被触摸我需要触摸所有 8 个单元
  • C# 中的反转数

    有没有一种简单的方法可以用函数反转 C 中的数字 我正在使用 XNA 我想告诉我的程序 如果我的 变量 超过某个数字 它必须反转它的值 重点是提供反弹效果 if ballPosition X gt screenWidth Invert th
  • 如何将多边形放入另一个多边形内[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有两个多边形 如下图所示 左边是 粗多边形 右边是 最终多边形 现在 我正在寻找算法来将 最终多边形 拟合到 粗糙多边形 内 并具有
  • 什么是“朴素”算法,什么是“封闭式”解决方案?

    我有一些关于描述算法时使用的术语语义的问题 首先 朴素 算法是什么意思 这与给定问题的其他解决方案有何不同 解决方案还可以采取哪些其他形式 其次 我听到很多人提到 封闭式 解决方案 我也不知道这意味着什么 但在尝试解决递归关系时经常会出现
  • 如何求两个地点的经纬度距离?

    我有一组位置的纬度和经度 怎么找distance从集合中的一个位置到另一个位置 有公式吗 半正矢公式假定地球是球形的 然而 地球的形状更为复杂 扁球体模型会给出更好的结果 如果需要这样的精度 你应该更好地使用文森特逆公式 See http
  • 解释 Vinay Deolalikar 的证明 P != NP [已关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 最近有一个paper https www win tue nl gwoegi P versus NP Deolalikar pdf惠普实验
  • 我应该对算法使用递归还是记忆化?

    如果我可以选择使用递归或记忆来解决问题 我应该使用哪一个 换句话说 如果它们都是可行的解决方案 因为它们提供了正确的输出并且可以在我正在使用的代码中合理地表达 那么我什么时候会使用其中一个而不是另一个 它们并不相互排斥 您可以同时使用它们
  • 为什么这个算法的Big-O复杂度是O(n^2)?

    我知道这个算法的大O复杂度是O n 2 但我不明白为什么 int sum 0 int i 1 j n n while i lt j sum 即使我们设定了j n n一开始 我们在每次迭代期间递增 i 并递减 j 因此最终的迭代次数不应该比n
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 求先递增后递减列表的最大值和最小值

    我尝试用谷歌搜索这个问题 但没有取得太大成功 我确信这个问题或类似问题有一个技术名称 但我似乎找不到答案 给定一个列表L整数 即严格递增 然后严格递减 找到该列表的最大值和最小值 例如 L可能 1 2 3 4 5 4 3 2 or 2 4
  • 石和磅的格式正确吗?

    我有一个图表 用于显示重量 以英石和磅 lbs 为单位 该图表由记录中的数据填充 对于权重 数据类型为 Double 记录数据是在运行时编辑的 我需要知道一种正确格式化输入数据的方法 为了更好地理解 首先看一下这些示例值 它们表示为石和磅
  • 使用什么算法来确定使系统达到“零”状态所需的最小操作数?

    这是一种更通用的问题 不是特定于语言的 有关要使用的想法和算法的更多信息 系统如下 它登记朋友群体之间的小额贷款 Alice and Bill要去吃午饭 比尔的卡坏了 所以爱丽丝支付了他的餐费 10 美元 第二天Bill and Charl
  • JavaScript 中的埃拉托斯特尼筛法对大量数据无限运行

    我一直在尝试写埃拉托斯特尼筛法 http en wikipedia org wiki Sieve of EratosthenesJavaScript 中的算法 基本上我只是按照以下步骤操作 创建从 2 到 n 1 的连续整数列表 令第一个素

随机推荐

  • javascript中判断对象是否有属性和值

    我想检查一个对象是否具有某物的属性并且其值是否等于某个值 var test name joey age 15 name hell age 12 就是这样 一个对象数组 现在我想在对象内部进行搜索 如果该对象包含我想要的内容 则返回 true
  • 非阻塞 multiprocessing.connection.Listener?

    我使用 multiprocessing connection Listener 进行进程之间的通信 它对我来说很有魅力 现在我真的很喜欢我的主循环在客户端命令之间做其他事情 不幸的是 listener accept 会阻止执行 直到建立来自
  • 你会如何设计一个可破解的网址

    想象一下 您有一组以良好的树形层次结构组织的产品类别 并且您希望提供可修改的 URL 来浏览这些产品类别 你可以做这样的事情 catalog categorya categoryb categoryc 然后 您可以很容易地找出应该列出产品的
  • 如何删除具有指针成员的类的指针?

    我的意思是 如果我有这样的课程 class A int pi A pa 当我打电话时delete pa will pi被删除 您需要定义一个析构函数来delete pi 此外 您还需要定义复制构造函数和赋值运算符 否则当实例A被复制的两个对
  • 将 Google Play 游戏与 Firebase 混合使用

    我使用 google games api 将排行榜添加到我的 android 游戏中 现在我想使用 Android Studio 的 Firebase 向导 添加横幅广告 它构建得很好 但是当我尝试创建 apk 时 出现以下错误 错误 将字
  • Linux,需要准确的程序计时。调度程序唤醒程序

    我有一个在 Linux 系统上运行的线程 我需要以尽可能准确的时间间隔执行它 例如 每毫秒执行一次 目前 这是通过创建一个计时器来完成的 timerfd create CLOCK MONOTONIC 0 然后在结构中传递所需的睡眠时间 ti
  • 使用 R 中的 glmulti 包对 akaike 权重进行穷举搜索多元回归

    我想知道是否有人可以帮助我理解为什么当我在 R 中输入脚本时收到错误消息 对于一些背景信息 我正在研究6 个不同变量的效果 我认为是 63 种组合或模型 X 对于我的环境科学荣誉项目 在不同空间尺度上分别具有初级总产量和生态系统净产量 Y
  • 参考应用程序xml资源中的android库项目xml资源

    我有一个定义 XML 资源的 Android 库项目 让我们使用可绘制选择器作为示例 但我在字符串 样式等方面遇到问题 LibProject res drawable button selector xml 定义一个选择器 LibProje
  • Mongo 查找器和标准

    我在 Rails 应用程序中使用 MongoDB 和 Mongoid 映射器 但我不明白finders and criteria的查询 例如在 mongodb 文档中的部分Finders是查询Model all 但如果我使用它 例如User
  • 如何使用 Cypress 检查可能不存在的元素

    我正在编写 Cypress 测试来登录网站 有username and password字段和一个Submit按钮 大多数登录都很简单 但有时首先会出现一个警告对话框 必须将其关闭 我试过这个 cy get login username t
  • 浮点数在CPU内部是如何存储的?

    我是一名初学者 正在学习组装基础知识 现在 我在读这件事的时候 来到了这一段 它解释了浮点数如何存储在内存中 浮点数的指数是一个 8 位字段 允许大量或 要存储的小数 指数被解释为正数或 消极的 实际指数是 8 位字段的值减去 127 12
  • 在 python 中滚动 idxmax() ?

    我有一个 python DataFrame 其中包含一些财务数据 我正在尝试为其创建一些技术指标 我试图弄清楚如何使用移动窗口函数来加速该过程 而不是逐个元素地进行 对于每个索引 我想返回过去 30 天的最大索引 我已经实现了一个逐个元素的
  • 将列类型更改为tinyInteger

    尝试在 Laravel 5 2 迁移中将数据列类型更改为tinyInteger
  • Visual Studio 探查器输出

    我写了一个执行的小类Main 依次执行A 我预计Main 方法本身位于堆栈调用的根部 因为它是我的应用程序中最顶层的函数 所做的一切都应该执行by Main 我编写了以下代码来测试 namespace ProfilerTest class
  • 需要裁剪+调整大小约 300000 个文件。运行时间 = 4 天以上。如何加快 bash 脚本的速度?

    我正在努力创建视频间隔拍摄 我拍摄的所有照片都是以 4 3 宽高比拍摄的 jpg 图像 2592x1944 分辨率 我希望它们在 1920x1080 下均为 16 9 我写了一个小脚本来执行此操作 但过程不是很快 我花了大约 17 分钟来裁
  • 在 Xcode 4 GM 中,如何打开 LLDB?我看到的都是GDB

    在方案运行调试器弹出窗口中 它显示的只是 None 和 GDB 这是针对使用 LLVM 构建的 iPad 4 2 模拟器 你不能 用苹果员工的话说 LLDB 尚不可用于 iOS 开发 https devforums apple com me
  • 共享 php 会话

    我最近遇到了一个问题 我一直在尝试解决它 但没有运气 我试图使用 GlusterFS 在所有服务器上的多个服务器 php apache 级别上共享 php 会话 但是 尽管该会话在所有服务器上都可以访问 但一旦我访问不同的服务器 会话就不会
  • Rails 中的 session 是方法还是哈希?有点困惑

    有一个非常简单的问题 我正在做 Michael Hartl 的 Railstutorial 它讨论了使用会话方法 借助 Rails 定义的 session 方法 用户登录很简单 我们可以将 session 视为一个散列 并按如下方式分配给它
  • git log --follow,gitpython 方式

    我正在尝试访问单个文件的提交历史记录 如下所示 git log follow
  • 如何将浮点数转换为分数?

    这是一个家庭作业问题 我想编写一个函数将浮点数转换为一对整数 分子和分母 例如 float 0 5 应转换为 1 2 我正在尝试 见下文 但坦率地说 它对我来说看起来不太好 f is the input float int n 1 whil