V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  by73  ›  全部回复第 7 页 / 共 7 页
回复总数  140
1  2  3  4  5  6  7  
2019-10-25 08:21:55 +08:00
回复了 jjshare 创建的主题 程序员 kotlin 做服务端开发靠谱吗?
kt 还不错,
2019-10-24 23:24:34 +08:00
回复了 kaler 创建的主题 C++ 问一个 c++中四舍五入的问题
啊,花了一个晚上,大概总结出了一些东西。先说结论吧,这算是 crt 不同而导致的,windows sdk 中的 printf 函数( cout 应该是一致的)调用的是 windows crt 的内容,默认四舍五入; mingw 使用的是自己整的一套 mingw-w64-crt,默认直接截断。

-----

tl;dr:windows crt 使用的是四舍五入,mingw crt 是直接截断。

( v2 排版可能不太好,源代码我有给定位,可以自己开着编辑器去看)

首先是 Windows 部分,进入 Windows SDK ucrt 文件夹(我的版本是 10.0.18362.0 )从 printf() 函数开始追,能够一路追到 convert/_fptostr.cpp 这个 CRT 源码,找到 `__acrt_fp_strflt_to_string` 函数 61 行就能看到四舍五入的策略,就是只要读完 precision 后还有数字,如果这个数字大于等于 5,就往前进一。这个逻辑是完全写进 CRT 的,所以我之前尝试了半天用 `fesetround()` 都没有任何用处(或者说,对 printf 不起作用)。

~~~ cpp
// Do any rounding which may be needed. Note: if digits < 0, we don't do
// any rounding because in this case, the rounding occurs in a digit which
// will not be output because of the precision requested.
if (digits >= 0 && *mantissa_it >= '5')
{
buffer_it--;

while (*buffer_it == '9')
{
*buffer_it-- = '0';
}

*buffer_it += 1;
}
~~~

p.s. 顺带感叹一句,printf 实现原来原来是状态机,DFA 牛逼。而且 windows crt 对 print 这部分似乎比较罗嗦,可能是我见识的太少。打印浮点大致的流程是:设置状态 -> 读取浮点数 -> 根据浮点数转换成高精度小数字符串(这个算法有点看不太懂,我太菜了)-> 根据状态对该字符串进行四舍五入 -> 最后处理该字符串 buffer,输出到 output 设备。不知道为啥要绕这么个弯(可能是算法问题)。

同理,不过 mingw crt 的源码默认没带,要去 https://git.code.sf.net/p/mingw-w64/mingw-w64 克隆一份,我是今天克隆的,不清楚版本(不过 crt 应该不会有太大变化);可以一路追到 mingw-w64/mingw-w64-crt/stdio/mingw_pformat.c,定位到 `__pformat_float_decimal`,处理截断的就是 1796 行的 easy mode 地方。相对 windows crt 的复杂,mingw crt 在这方面倒是比较简单,直接输出 precision 个字符,输出完就行,不做任何其他处理,简而言之就是“截断”。

~~~ cpp
if(decimal_place <= 0){ /* easy mode */
__pformat_putc( '0', stream );
points:
__pformat_emit_radix_point(stream);
for(int32_t written = 0; written < prec; written++){
if(decimal_place < 0){ /* leading 0s */
decimal_place++;
__pformat_putc( '0', stream );
/* significand */
} else if ( sig_written < max_prec ){
__pformat_putc( str_sig[sig_written], stream );
sig_written++;
} else { /* trailing 0s */
__pformat_putc( '0', stream );
}
}
} else // 后面是 hard mode,即小数部分不定长
~~~

p.p.s. mingw 的原理也是状态机,但是相对 windows 简化了许多,没有见到像 windows crt 那样使用的跳转表。大致 printf 流程为:读取 format 根据符号设置状态 -> 根据 IEEE 754 提出指数、小数、符号 -> 直接根据截断进行输出;相比之下没有 windows 那样频繁对 buffer 的操作。

-----

干,搞了一晚上,一开始以为只是单纯的 compiler 的问题,但发现无论怎么调 flag 都没用,才考虑到是 crt 的问题,果然我还是 too young。不过读大厂的代码还是挺舒服的,除了代码定位只能靠 vscode 搜索,其他该有的注释都有,还很详细,不愧是 m$。相比之下 mingw 的代码要逊一点,可能是我不太习惯 c 吧 emm
2019-10-24 21:00:38 +08:00
回复了 Libby520 创建的主题 程序员 人民日报:程序员真的是太太太太太太太太难了!
想起了昨天程序员自黑的那个贴。。
2019-10-24 17:52:44 +08:00
回复了 flowfire 创建的主题 Android 买了一加 7T Pro ,本来还觉得美滋滋,现在想退货了。。。。
@standin000 不用,但是需要先把所有账号都登出,开启来比较麻烦,可以参考 https://github.com/heruoxin/Ice-Box-Docs
这是“标准”,你复制整个地址栏肯定给你的就是完整的带协议的 URL,你要是只想复制主机名的话,直接去 chrome 应用商店找扩展,一堆。
2019-10-23 22:00:53 +08:00
回复了 flowfire 创建的主题 Android 买了一加 7T Pro ,本来还觉得美滋滋,现在想退货了。。。。
选择停用吧,现在 Android 的 DevicePolicyManager 还能用,虽然开起来比较麻烦,但算是暂时非 root 不折腾的最优解。我现在 MIUI 配合冰箱能停用绝大多数的内置应用,使用起来还算凑合。
2019-10-23 21:54:04 +08:00
回复了 a154312237 创建的主题 推广 搞点节日气氛,送大家点福利
还行,之前原价买的砖头挺不错的;不过还是很不习惯充电宝自带线的这种设定。。
没有,你需要的是一个 `.properties` to `.java` 的工具; IDEA 上找了一下,倒是有人写过 https://plugins.jetbrains.com/plugin/9226-propertiestoclass/ 这种插件,但是要自己去 generate。。
2019-10-23 20:06:11 +08:00
回复了 Youngxj 创建的主题 程序员 是什么原因导致我们写代码的效率很低?
主要是你广告里的那个 cms 有点刺激
想起来之前还在折腾 [neqo]( https://github.com/mozilla/neqo ),没想到原来来的这么快
2019-10-22 13:37:17 +08:00
回复了 Felldeadbird 创建的主题 程序员 程序员还是少点自黑好
林子大了什么鸟都有,建议转去生化环财,保证没自黑,全是真实案例[狗头]
2019-10-21 12:49:43 +08:00
回复了 s1louw 创建的主题 问与答 有大神知道这样的公众号排版黑科技是怎么实现的吗
大概看了下源码,是图片 + gif + mix-blend-mode,貌似没有找到 svg 的影子。中间的渐变则是直接用新图片代替(应该是图片与图片之间的渐变比较难用纯 css 做到)。上滑是靠 overflow + float: left 实现的。这里面涉及的 css 排版还是比较多的,建议开着开发者工具慢慢调试看直观效果,遇到哪里有问题就搜。而且推文对图片处理的要求比较多,因为只能靠 css,但 css 的图片处理能力不强,所以可能还需要去看一下图片相关的内容。当然只是建议,步子还是不要跨太大了 emm

跑个题,apple.com 前端感觉有很多奇奇怪怪的点子,比如 apple musice 的页面用过 sticky ; ipad pro 用过横向滚动(这个当时研究了一天,发现原理居然是搞一个正方形的页面,绑定垂直滚动事件让它直接控制水平,这解决方案真的强,直接搞定 smooth scroll )。要是微信推文能用 js,apple 绝对能搞出花来。当然楼上所述的视觉障碍也是个问题,但考虑到这是一篇推文,而且微信自己也没有任何无障碍的东西。。唉。
2019-10-20 19:36:33 +08:00
回复了 ZredoC 创建的主题 程序员 大佬们的 IDE 都在用暗色模式吗?
其实都无所谓,现在很多深色主题都偏灰,不是那种纯黑的,所以刺激也没那么大。我更偏向于白色主题 + windows 自带的夜间模式,感觉就是个习惯问题。。
2019-10-11 12:04:31 +08:00
回复了 zazalu 创建的主题 Java Java8 的函数式编程支持,我学习后觉得很沮丧和鸡肋
是很鸡肋,连 pattern matching 都没有(逃
2019-09-29 14:34:44 +08:00
回复了 amiwrong123 创建的主题 程序员 Java 泛型方法与通配符 其中的类型推断该如何理解?
@amiwrong123 `exact2` 这个,因为形参用的是 `Holder<T>` 这样的 concrete type,传入实参 `Holder<? extends T>` 是一个“集合”,编译器无法判断到底该该采用哪一个类型传进去。

先改下 `bounded` 的声明为 `Holder<? extends Number>`;那么如果我调用 `exact2(bounded, 2.0)` 时编译器把类型 capture 为 `Holder<Double>`,但实际上你 `bounded` 的真正类型应该是 `Holder<Long>`,这就引发了矛盾。因此编译器不允许 wildcard type 和 concrete type 之间的转换。

> The capture of a wildcard is compatible to a corresponding wildcard, never to a concrete type. Correspondingly, the capture of a bounded wildcard is compatible solely to other wildcards, but never to the bound.
>
> 来源:<http://www.angelikalanger.com/GenericsFAQ/FAQSections/TechnicalDetails.html#FAQ503>
2019-09-22 23:56:55 +08:00
回复了 miniyao 创建的主题 Python Python 处理浮点运算,为什么浮点位数会有误差?
引子 * 乎:请重修 IEEE 754
大致看了下 docker image,java、node、elasticsearch,512 mb 的 vps 可以放弃了。。(我树莓派也要继续闲置 orz
2019-09-19 16:24:24 +08:00
回复了 cwjokaka 创建的主题 程序员 有人试过在 win10 家庭版上安装 docker 吗😂
@fvckDaybyte2 有,但是没有 hyper-v,docker desktop 运行是基于 hyper-v 的;用 wsl 装 docker 似乎也可以,不过不知道有什么坑。。
2019-09-17 23:02:42 +08:00
回复了 c0011 创建的主题 C++ MSVC's STL 开源的意义是什么?
你不是都贴了链接嘛:

> Q: Why are you doing this?
>
> A: There are several reasons. Working on the STL in GitHub will allow our customers to follow our development as it happens, try out our latest changes, and help improve our pull requests by reviewing them. As C++ Standardization accelerates, with more large features being voted in every year, we believe that accepting major features as open source contributions will be important. (For example, C++20’s chrono and format libraries are potential candidates.) We also want to contribute back to the C++ community by making it possible to take our implementations of major features. (For example, C++17’s charconv.)

简而言之就是微软想摸鱼了(雾),想让大家提交 pull requests。
1  2  3  4  5  6  7  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2915 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 41ms · UTC 07:11 · PVG 15:11 · LAX 23:11 · JFK 02:11
Developed with CodeLauncher
♥ Do have faith in what you're doing.