假期快结束了,有个 C++难题,看看多少人会。

讨论 未结 11 41
tool2d
tool2d 会员 2023年1月27日 09:56 发表
<p>如图所示</p> <p><img alt="" class="embedded_image" loading="lazy" referrerpolicy="no-referrer" rel="noreferrer" src="https://i.imgur.com/2NETFV6.jpg"></p> <ul> <li> <p>一般怎么实现 23 行里 FORCE_EVAL ,这种避免编译器优化的语句;空语句 x+toint 的用意何在?</p> </li> <li> <p>24 行,为什么要写 return 0 * u.f ,而不写成 return 0 ;</p> </li> <li> <p>26 行,为什么要写成 y = x + toint - toint - x; 而不写成 y = (x - x) + (toint - toint);</p> </li> </ul> <p><a href="https://github.com/bminor/musl/blob/master/src/math/roundf.c" rel="nofollow">github 完整源代码</a></p>
收藏(0)  分享
相关标签: 灌水交流
注意:本文归作者所有,未经作者允许,不得转载
11个回复
  • tool2d
    2023年1月27日 10:26
    哈哈,有道理,可惜主题已经不能编辑了。
    0 0
  • Nugine0
    2023年1月27日 10:26
    应该是浮点误差相关的优化(但我用不上)
    0 0
  • xtreme1
    2023年1月27日 10:26
    1. 检测算数溢出 2. 0 * NaN = NaN; 0 * INF = NaN 3. y = int(x) - x
    0 0
  • kkkbbb
    2023年1月27日 11:28
    超出了我能力范畴。。。
    0 0
  • lcdtyph
    2023年1月27日 11:57
    避免编译器优化可以用 volatile access
    0 0
  • framlog
    2023年1月27日 15:26
    1. 搞个 mlock 之类的找个内存访问下 2. 不知道- - 3. 处理溢出吧。
    0 0
  • wangweixvan
    2023年1月27日 16:28
    1. 用内联汇编 `__asm__ __volatile__ ("" : "+r" foo)`; 设置浮点异常状态; 2. 区分正零和负零; 3. 先加一个很大的数,使精度减少,恰好保留到整数,然后减去很大的数,得到原数的整数部分,最后减去原数,就得到原数的小数部分; 浮点运算不满足交换律或结合律。
    0 0
  • pipapa
    2023年1月27日 16:28
    和浮点数编码相关吧,很少用
    0 0
  • MoRanjiang
    2023年1月27日 19:25
    开学就要 C 考试了,你这个题目给我吓坏了。 不过想想老师并不会考这么难,我决定继续摸鱼。
    0 0