gpt4 book ai didi

c++ - Ceil 函数 : how can we implement it ourselves?

转载 作者:IT老高 更新时间:2023-10-28 22:23:34 26 4
gpt4 key购买 nike

我知道 C++ 为我们提供了一个 ceil 函数。为了练习,我想知道如何在 C++ 中实现 ceil 函数。该方法的签名是public static int ceil(float num)

请提供一些见解。

我想到了一个简单的方法:将num转换为字符串,找到小数点的索引,检查小数部分是否大于0。如果是,则返回num+1,否则返回num。但我想避免使用字符串转换

最佳答案

你可以拆开一个IEEE754 float 的成分,自己实现逻辑:

#include <cstring>

float my_ceil(float f)
{
unsigned input;
memcpy(&input, &f, 4);
int exponent = ((input >> 23) & 255) - 127;
if (exponent < 0) return (f > 0);
// small numbers get rounded to 0 or 1, depending on their sign

int fractional_bits = 23 - exponent;
if (fractional_bits <= 0) return f;
// numbers without fractional bits are mapped to themselves

unsigned integral_mask = 0xffffffff << fractional_bits;
unsigned output = input & integral_mask;
// round the number down by masking out the fractional bits

memcpy(&f, &output, 4);
if (f > 0 && output != input) ++f;
// positive numbers need to be rounded up, not down

return f;
}

(在此处插入通常的“不可移植”免责声明。)

关于c++ - Ceil 函数 : how can we implement it ourselves?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8377412/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com