Denominator:分数 分数极限分子 (nominator denominator)

fraction.Fraction.limit_denominator存在,并找到分母小于给定最大值的最接近的分数,但是没有明显的方法来限制分子

限制分子的最佳方法是什么?(即找到分子和分母都小于给定最大值的最接近的分数。)

(目标:我需要将分子也限制为 2 * * 32,因为 TIFF 文件将分数存储为两个无符号的 32 位整数。)

一个粗略的方法(可能找不到真正的最接近分数):

from fractions import Fraction
def limit_32bit_rational(f: float) -> Fraction:
    ndigits = 15
    while True:
            r = Fraction.from_float(f).limit_denominator(1000000)
            if r.numerator < 2**32:
                return r
            f = round(f, ndigits)
            ndigits -= 1

有没有更好的方法来找到最接近的分数,其公母和分母小于 2 * * 32?

1

您可以使用float.as_integer_ratio()方法来获取任何浮点数的分子和分母:

f = 2345.245624
numerator, denominator = (f).as_integer_ratio()
print("Numerator", numerator)

输出:

2578624833578781
EDIT:

您可以尝试使用if语句来检查分子或分母是否大于2 ** 32;如果是这样,将它们乘以一个比例,并将它们四舍五入到最接近的整数:

def limit_32bit_rational(f):
    numerator, denominator = (f).as_integer_ratio()
    max_num = 2 ** 32
    if numerator > max_num or denominator > max_num:
        scale = max_num / max(numerator, denominator)
        return round(numerator * scale), round(denominator * scale)
    return numerator, denominator
1

您还可以翻转分数并调用limit_denominator来限制分子并再次翻转结果:

def limit_32bit_rational(f: float) -> Fraction:
    tmp = Fraction(f).limit_denominator(0xFFFF_FFFF)
    if tmp.numerator <= 0xFFFF_FFFF:
        # makes sure we don't flip if numerator is 0
        return tmp
    else:
        # flip numerator with denominator to limit the inputs numerator
        tmp = Fraction(numerator=tmp.denominator, denominator=tmp.numerator).limit_denominator(0xFFFF_FFFF)
        return Fraction(numerator=tmp.denominator, denominator=tmp.numerator)

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(245)
Ug如何生成程序:用于将值添加到表达式的 NX9/UG知识融合脚本
上一篇
Ios怎么用迅雷:顺风包子怎么用:(use tailwind in react)
下一篇

相关推荐

  • java 字符串删除:Programming Language

    示例示例Java 字符串删除,是指从字符串中删除一些特定的字符或字符串。Java 提供了几种方法来实现字符串删除,具体如下:使用) 方法) 方法可以从字符串中删除一部分字符,只需要指定起始索引和结束索引即可。…

    2023-10-12 01:09:54
    0 96 89
  • python 双引号:Python - A Powerful Programming Language

    示例示例Python 双引号是用双引号(" ")来表示字符串的一种方式。双引号可以用来包裹字符串,使其成为有效的 Python 语句。例如:…

    2023-07-16 08:06:14
    0 57 45
  • Jsp编程语言:JSP中的表达式语言不起作用(expression in language)

    关于Jsp编程语言的问题,在expression in language中经常遇到,我是 JSP 的新手,并且使用 Expression 语言。我正在使用 Eclipse Galileo 与版本 2.5 和 Tomcat 6 服务器。我只是想问一下,我的简单 Expression Language 不是打印 vale,就像如果我写${1>2}它假设给出 false,但它显示${1>2}只有当它呈现页面。但是当我使用<c:out value="${1>2}"/>这个错误的…

    2024-02-29 16:31:01
    0 74 18
  • 欧姆龙cp1e说明书:欧姆龙ST和西门子SCL的差异(siemens programming language)

    关于欧姆龙cp1e说明书的问题,在siemens programming language中经常遇到,欧姆龙 ST-Language 和西门子 S7 SCL(变量的定义,编辑器,语法)之间有什么区别?我知道它们都声称是由 IEC 61131-3 标准化的。…

    2024-01-02 00:37:59
    0 27 20
  • Springboot+vue源码:多模块 Springboot

    关于Springboot+vue源码的问题,在spring boot modules中经常遇到,我正在创建多模块 springboot 项目,其中我有 common-library 和 admin 服务是不同的模块,common-library 包含所有实体和存储库类和接口,admin-service 将 common-library 作为依赖项实现,我使用 gradle,当我构建项目时,它的构建成功使用\…

    2023-12-20 02:47:10
    0 31 22
  • 欧姆龙c25s怎么样:欧姆龙ST和西门子SCL的差异(siemens programming language)

    关于欧姆龙c25s怎么样的问题,在siemens programming language中经常遇到,欧姆龙 ST-Language 和西门子 S7 SCL(变量的定义,编辑器,语法)之间有什么区别?我知道它们都声称是由 IEC 61131-3 标准化的。…

    2023-10-25 11:37:01
    0 70 31
  • Led显示屏安装步骤:串行输出到ArduinoLED显示屏

    关于Led显示屏安装步骤的问题,在arduino led screen中经常遇到,我最近用我的 Arduino 完成了这个项目(对我来说是一个相当新的爱好):…

    2024-01-03 11:03:51
    0 99 94
  • 华为平板能用来编程么:你能用C语言编程FPGA吗 (fpga programming language)

    关于华为平板能用来编程么的问题,在fpga programming language中经常遇到,在大学里我用类似 C 的语言编程了一个 FPGA。但是,我也知道一个通常在 Verilog 或 VHDL 中编程 FPGA。这是设计师的选择吗?如果是,性能缺点是什么?…

    2024-02-24 05:25:26
    0 71 91

发表评论

登录 后才能评论

评论列表(8条)