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

2023-01-27 17:52:31 +08:00
 tool2d

如图所示

github 完整源代码

4077 次点击
所在节点    C++
13 条回复
learningman
2023-01-27 18:00:56 +08:00
不知道,但是我知道这是 C
tool2d
2023-01-27 18:03:08 +08:00
@learningman 哈哈,有道理,可惜主题已经不能编辑了。
Nugine0
2023-01-27 18:13:42 +08:00
应该是浮点误差相关的优化(但我用不上)
xtreme1
2023-01-27 18:25:05 +08:00
1. 检测算数溢出
2. 0 * NaN = NaN; 0 * INF = NaN
3. y = int(x) - x
kkkbbb
2023-01-27 18:59:09 +08:00
超出了我能力范畴。。。
lcdtyph
2023-01-27 19:42:53 +08:00
避免编译器优化可以用 volatile access
zzz22333
2023-01-27 19:44:15 +08:00
看下反汇编,一切都知道了
framlog
2023-01-27 23:15:01 +08:00
1. 搞个 mlock 之类的找个内存访问下
2. 不知道- -
3. 处理溢出吧。
wangweixvan
2023-01-27 23:55:10 +08:00
1. 用内联汇编 `__asm__ __volatile__ ("" : "+r" foo)`;
设置浮点异常状态;
2. 区分正零和负零;
3. 先加一个很大的数,使精度减少,恰好保留到整数,然后减去很大的数,得到原数的整数部分,最后减去原数,就得到原数的小数部分;
浮点运算不满足交换律或结合律。
pipapa
2023-01-28 00:08:41 +08:00
和浮点数编码相关吧,很少用
MoRanjiang
2023-01-28 03:05:37 +08:00
开学就要 C 考试了,你这个题目给我吓坏了。
不过想想老师并不会考这么难,我决定继续摸鱼。
iOCZ
2023-01-28 12:01:18 +08:00
@MoRanjiang 老师:我也不会这个
kice
2023-01-29 03:27:27 +08:00
浮点位运算 hack ,掏出 IEEE 754 对着看位操作了什么的就行。这里的函数比起那 1/sqrt(x)好理解一些。

如果没有特殊要求,尽量使用标准库的浮点数函数。

阻止编译器优化的实现可以看看 google/benchmark 的 DoNotOptimize 和 ClobberMemory 。具体用法可以看看 cppcon 的一个演讲: <amp-youtube data-videoid="nXaxk27zwlk" layout="responsive" width="480" height="270"></amp-youtube>
https://github.com/google/benchmark/blob/a3235d7b69c84e8c9ff8722a22b8ac5e1bc716a6/include/benchmark/benchmark.h#L431

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/910880

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX