首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fractions.Fraction限制分子?

fractions.Fraction限制分子?
EN

Stack Overflow用户
提问于 2021-05-18 12:51:58
回答 2查看 313关注 0票数 2

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

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

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

一种粗糙的方法(可能找不到真正最接近的部分):

代码语言:javascript
复制
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?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-18 12:56:14

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

代码语言:javascript
复制
f = 2345.245624
numerator, denominator = (f).as_integer_ratio()
print("Numerator", numerator)

输出:

代码语言:javascript
复制
2578624833578781

编辑:

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

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2022-03-30 15:07:38

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

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67586576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档