函数ceil()、round()、floor()的执行速度 - 页 2

 
pavlick_:

你为什么不投向长?虽然你也可以溢出它,但溢出Int要容易得多。


当然,如果需要的话,你可以投长线。

 
y=ceil(x);  -> y=(int)(x+1);

x=3;

y=3;y=4。

 
Nikolai Semko:

当然,如果你需要,你可以做多。

所以你的广告方式,会被愚蠢地复制。一般来说,你不能在没有任何检查的情况下这样施放,这是不可能的。

当一个实数浮动类型的有限值被转换为_Bool以外的整数类型时,小数部分被丢弃(即,该值被截断为零)。如果积分部分的值不能由整数类型表示,则行为未定义。
也许他会卖掉押金,也许他会做其他事情 ))
 
pavlick_ :

所以你的广告方式,会被直截了当地抄袭。你不能在不检查的情况下这样投,这是僭建。

也许定金会卖完,也许会做其他事情 )))。

我没有在做任何广告。我在分享一个想法。这就是这个论坛和讨论的目的。

 
Dmitry Fedoseev:

x=3;

y=3;y=4。


对了!谢谢!我得看看我对天花板能做些什么。

 
y=ceil(x);  -> y=(int)(x+1);

德米特里-费多塞耶夫

x=3;

y=3;y=4。

作为一个选项,虽然不是非常漂亮,但速度是一样的。

y=ceil(x);  -> y=(int)(x+0.999999999999999);
#define _ceil(x)  (int)((x)+0.999999999999999)

double x=3;
int y=_ceil(x);
 
 
Nikolai Semko:

作为一个选项,虽然不是很好,但速度是一样的。

那么可能会更好:x + 1 -DBL_MIN。或x + 1 -DBL_EPSILON 没有检查过,试试吧。

哦,那负数呢?天花板和地板应该是不同的

 
Alexey Navoykov:

那么可能会更好:x + 1 -DBL_MIN。或x + 1 -DBL_EPSILON 没有检查过,试试吧。

哦,那负数呢?天花板和地板的情况肯定不同

DBL_MINDBL_EPSILON不起作用 - 它们太小 了。也许让它保持在0.99999999999999(16个9--双数中小数点的最大数量)是有意义的。

是的,你是对的--对于负数一定有不同的算法。谢谢你!我将在第一篇文章中做一个补充。

谁有兴趣--可以思考如何解决负数的问题。我个人不感兴趣,因为我所有的问题都与正数有关。

 
Nikolai Semko:

留下0.999999999999999999(16个9--双数中的最大小数位数)可能更有意义。

void OnStart()
{
        Print((int)(3.0 + 0.9999999999999999));
}
你检查过结果了吗?
 

A100:

void OnStart()
{
        Print( (int)(3 + 0.9999999999999999));
}


是的,但如果。

x=3;
int Y=(int)ceil(x);
Print(Y);
Y=(int)(x+0.999999999999999);
Print(Y);

那么就可以了。编译者的奇迹。:))