有没有全一点的 int128 注意事项

学术版

Light_az @ 2024-11-28 19:09:17

Rt ,网上找到的断断续续,没有全面介绍的,Cu


by xiezheyuan @ 2024-11-28 19:10:08

@Light_az

手写读入输出,尽量不使用内置函数(abs),注意常数,没了。


by Loser_Syx @ 2024-11-28 19:11:12

@Light_az abs(__int128)


by xiezheyuan @ 2024-11-28 19:12:29

@Loser_Syx 推荐如果真要写abs的话上一个宏:

#define abs(x) ((x) > 0 ? (x) : -(x))

by Moeebius @ 2024-11-28 19:17:30

不要放在数组访问的下标里。下面这份代码是 典型错误

int a[1234];

int foo(__int128 x) { return a[x]; }

by xiezheyuan @ 2024-11-28 19:21:38

@Moeebius 刚刚测了一下,没问题啊qwq

xiezheyuan ➜ ~/xzy/2 $ g++ -o 1 1.cpp -O2 -std=c++14 -static
xiezheyuan ➜ ~/xzy/2 $ ./1
3
xiezheyuan ➜ ~/xzy/2 $ cat 1.cpp
#include <bits/stdc++.h>
using namespace std;

int a[1234];

int foo(__int128 x) { return a[x]; }

signed main(){
        a[2] = 3;
        cout << foo(2) << '\n';
}

by Light_az @ 2024-11-28 19:22:21

@xiezheyuan 下标确实会炸,去年有个比赛一堆人因为这个炸了


by xiezheyuan @ 2024-11-28 19:23:16

@Light_az 好吧,这玩意看起来听玄学的,那就最好别用吧,以免奇怪CE


by Moeebius @ 2024-11-28 19:27:12

@xiezheyuan 不是 CE,是有概率触发编译器 bug(不早于 gcc14 修复),所以别用。

挂了的示例


by xiezheyuan @ 2024-11-28 19:38:10

@Moeebius

刚刚在本地(Ubuntu 20.04,对标 NOI Linux 2.0)试了一下,如果不开 sanitize 会出浮点数例外 (核心已转储),但是开 sanitize 没问题,这都是什么鬼……


by CodingOIer @ 2024-11-28 19:40:33

@xiezheyuan可以使用 sudo apt install gcc-9 然后使用 g++-9 来获取相同地编译环境


| 下一页