V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  geelaw  ›  全部回复第 16 页 / 共 177 页
回复总数  3534
1 ... 12  13  14  15  16  17  18  19  20  21 ... 177  
2023-09-28 16:40:56 +08:00
回复了 tool2d 创建的主题 程序员 感觉 double 精度不够用啊
第一个考虑的方向是条件数,从三个平直系坐标计算三角形面积,在所给的输入处的条件数是 400 亿,这说明计算结果只能期待 <6 位有效数字。

第二个考虑的方向是误差累积,楼主的算法,绝对误差是 (sum |x_i| + sum |y_i|) * eps (这个界比较松)。

如果先把任意一个点平移到原点,则绝对误差是 (sum |x_i - x_1| + sum |y_i - y_1|) * 2eps ,是更好的策略。
2023-09-27 12:28:18 +08:00
回复了 fatyoung 创建的主题 Linux 关于 Linux 进程权限和用户权限的一点疑问
是运维先建立好账户设置好权限,然后再把部署好的程序以那个账户启动。这个问题和是哪种操作系统也没有关系。

> 然后我请求了一个接口,去访问某个文件,那我怎么确认该请求是否有权限访问

如果程序想要知道自己是否有权限访问某个文件,惟一正确的方法是尝试以需要的访问方式(读、写、读写)打开并使用。提前检查后再打开无意义,因为在检查完毕后、打开之前,别的程序可以修改文件的权限;如果不想要访问文件,则是否有权限访问的问题是无意义的。
2023-09-21 17:17:00 +08:00
回复了 sugarsalt 创建的主题 程序员 求教, bat 脚本里,设了 chcp 仍然有中文无法正确显示
至于原来的代码为什么不行,假设 batch 是 UTF-8 保存的,且本机代码页是 936 ,那么最终有颜色的输出结果是 "ʲô",这是把 "什么" 用 Windows-936 (~ GB) 编码之后再用 UTF-8 解码,这说明 cmd 设置变量的时候,是用 UTF-8 解读 batch 文件的(从而正确把文件中的字节解读为 "什么"),但是数据传入 findstr.exe 之后变成了 Windows-936 ,这很可能是因为 findstr.exe 使用的不是 WCHAR 而是 CHAR (因此 argv 是根据系统代码页,也就是 936 ,解读的,因此 findstr.exe 内部看到的是 GB 编码的 "什么"),并且在最后 findstr.exe 向控制台以输出了它所得到的字节流(即输出了 GB 编码的 "什么")——但控制台的代码页是 UTF-8 ,因此它把 GB 编码的 "什么" 用 UTF-8 解读并显示。
2023-09-21 16:38:15 +08:00
回复了 sugarsalt 创建的主题 程序员 求教, bat 脚本里,设了 chcp 仍然有中文无法正确显示
这段代码相当糟糕,是利用 findstr 这个工具显示文件名,因此你传入的字符串必须是合法的文件名,而且显示的时候会覆盖当前目录下的同名文件——总之就是个不定时炸弹。

如果必须要用 batch ,推荐 https://gist.github.com/mlocati/fdabcaeb8071d5c75a2d51712db24011
否则可以考虑 PowerShell

另外请不要在 bat 里面 chcp ,这是在劫持用户的 console ,而且我没找到如何让 Windows 以固定的编码读取 batch 的功能,它或许永远是以系统代码页读取 batch 并运行的,也可能是按照当前代码页一次读取一行运行的。考虑如下 UTF-8 的 batch:

chcp 932>nul 2>nul
chcp 65001>nul 2>nul && echo ¿

其中 echo 的字符是 U+00BF ,它的 UTF-8 编码是 0xC2 0xBF ,一开始的 932 是 Windows 的 Shift JIS 实现,在这个代码页里 0xC2 不是合法的开头字节,因此在默认的日语 Windows 上执行它会产生不可预知的后果。

实际效果是打印出来的并不是倒转的问号,而是 ツソ 这两个符号。
2023-09-21 15:37:26 +08:00
回复了 lurenn 创建的主题 macOS WPS 创建的文档无法被 one drive 同步?
可能要取消选定 OneDrive 的“让 Office 程序处理 Office 文件的同步”?
2023-09-21 12:43:23 +08:00
回复了 polobug 创建的主题 问与答 win11 的 DevDrive 有人体验过吗
@mmdsun ReFS 也不算很新了吧,Windows Server 2012 以来的技术了,而且多数 Windows 程序都采用的是 Win32 ,根本无需关心文件系统是什么。

我记得很久以前(几年前)看过 ReFS 会直接删除损坏的文件,搜索了一下只找到今年的一个版本 https://www.zhihu.com/question/594562714/answer/2975876927 观望中
2023-09-20 14:52:24 +08:00
回复了 xJogger 创建的主题 发音 GUI 的三种读法
@geelaw #24 更正一下… gēi wū yī 是更“接地气”的说法,严格来说是 gê wu yi (gê̄ wū yī)。
2023-09-20 14:47:32 +08:00
回复了 xJogger 创建的主题 发音 GUI 的三种读法
汉语读法是 gēi wū yī,见拉丁字母的汉语读音规定(即汉语拼音名称音)。
2023-09-20 12:46:27 +08:00
回复了 xuelang 创建的主题 C++ C++ 链接符号决议 -- 自以为懂了,结果...
@xuelang #18 汉语“决议”是“会议所确定的较重大的事项”的意思,在计算机技术方面应该理解为复杂的选择过程,比如“重载决议”是可接受的说法,因为要根据形参列表和实参列表从多个可能的选项里根据一系列不那么直接的规则选出最合适的。链接里的 symbol resolution 的 resolution 应该译作“解析”,因为这个过程只是简单地查找符号的定义,不存在复杂的规则。
2023-09-19 22:43:05 +08:00
回复了 LuckyPocketWatch 创建的主题 Linux 申请大内存,程序直接被系统干掉,求指教
怎么确定是系统结束了进程,还是进程结束了自己?你试过 try catch 了吗? allDevs.max_size() 是多少?
2023-09-19 22:09:16 +08:00
回复了 xuelang 创建的主题 C++ C++ 链接符号决议 -- 自以为懂了,结果...
@xuelang #15 链接并不能用来挑选(“决议”) A 的这个定义或那个定义,A 自始自终都只有一个定义。
2023-09-19 20:20:00 +08:00
回复了 xuelang 创建的主题 C++ C++ 链接符号决议 -- 自以为懂了,结果...
满足 ODR 的程序,如果同一个名字在多个翻译单元里有定义,那么任意可达的定义都是等价的,因此可以随便选(比如第一个赢)。

随便选最有意义的作用是模板,因为每个使用了某个模板的翻译单元必须包含那个模板的完整定义(需要 SFINAE 和 name lookup ),不能让模板声明在 .hh 里实现在 .cc 里。

更早的时候链接时优化还不流行,因此内联( C++ 意义的 inline )函数可以促进函数在编译时被内联(优化意义的 inline )。

链接并不是“决议”工具。
2023-09-19 20:10:33 +08:00
回复了 xuelang 创建的主题 C++ C++ 链接符号决议 -- 自以为懂了,结果...
无论是看代码还是问 ChatGPT 却不查证都是非常糟糕的学习方法,第一步应该是理解 C++ 标准是如何规定的。

文章里无论是 int sum(int, int) 还是 class Demo 都是非常严重的 ODR violation 。

在 [basic.def.odr]/14 里规定了 (14.1) 非内联非模板函数在多个翻译单元中有定义时 (14) 程序不良,且在非模块中无需报错,这适用于 sum 的情况。

在 [basic.def.odr]/14 里规定了 (14.2) 多个翻译单元中有定义的 class 如果不满足 (14.4) 在所有可达的翻译单元中定义是相同的记号( token )序列,则 (14) 程序不良,且在非模块中无需报错,这适用于 class Demo 的情况。

至于某个具体的编译器、链接器产生的什么行为,不过是巧合罢了。
2023-09-18 19:06:40 +08:00
回复了 LuckyPocketWatch 创建的主题 C++ 如何判断一个 double 有几位?
建议重新思考你的设计。因为 IEEE-754 双精度数里面 0.000001 等于 0.000000999999999999999954748111825886 ,你希望传入这个数的时候得到 6 还是 7 ?
2023-09-18 13:54:04 +08:00
回复了 thisismr2 创建的主题 程序员 问: A 和 B 通过 S 中转来进行消息传递是否安全
@thisismr2 #3 描述不是很清楚,比如谁是攻击者、攻击者有哪些能力(即达到何种安全性)。
最简单的场景:C 可以把 K 告诉 D ,然后 D 把 K 告诉 S 。
2023-09-16 18:14:46 +08:00
回复了 zzzkkk 创建的主题 C++ fsantinize 弱智
@zzzkkk #47 接续 #50 ,假设数组前面一切可读取的虚拟内存都是 ' ',且假设指针加减运算未定义行为的实现就是访问这些虚拟内存,那么这个程序会因为把 start 减到不可读的虚拟内存地址之后继续读 start 而访问违规,从而崩溃。
2023-09-16 18:07:24 +08:00
回复了 zzzkkk 创建的主题 C++ fsantinize 弱智
@zzzkkk #47 假设编译器不检查内存,并且数组前面全是空格呢?

另外这个 while 循环写得可以说是乱七八糟了。
2023-09-16 18:05:05 +08:00
回复了 zzzkkk 创建的主题 C++ fsantinize 弱智
@zzzkkk #38

int a[1];
a + 0; // OK
a + 1; // OK
a - 1; // 未定义行为
a + 2; // 未定义行为

和 (a-1)、(a+2) 有没有被解引用没有任何关系。见 C++ 标准 [expr.add]/4:

When an expression J that has integral type is added to or subtracted from an expression P of pointer type, the result has the type of P.
(4.1) If P evaluates to a null pointer value and J evaluates to 0, the result is a null pointer value.
(4.2) Otherwise, if P points to an array element i of an array object x with n elements ([dcl.array]), the expressions P + J and J + P (where J has the value j) point to the (possibly-hypothetical) array element i+j of x if 0≤i+j≤n and the expression P - J points to the (possibly-hypothetical) array element i−j of x if 0≤i−j≤n.
(4.3) Otherwise, the behavior is undefined.

注意 4.2 要求表达式的结果指向数组对象或者数组末尾之后,不允许数组开头之前。
2023-09-16 17:53:55 +08:00
回复了 zzzkkk 创建的主题 C++ fsantinize 弱智
@zzzkkk #31 C++ 不存在变长数组,所以 int n; scanf("%d", &n); int a[n]; 是完全错误的,即使 n 输入的是 1 也是错误的。
1 ... 12  13  14  15  16  17  18  19  20  21 ... 177  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1021 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 38ms · UTC 19:27 · PVG 03:27 · LAX 11:27 · JFK 14:27
Developed with CodeLauncher
♥ Do have faith in what you're doing.