从零开始实现 Nix 数学库 系列文章目录: 从零开始实现 Nix 三角函数库 从零开始实现 Nix 对数函数库 (当前文章) (题图来自: 维基百科 - 对数 ) 起因 由于一个有点离谱的原因(计算 VPS 间的物理距离来估算网络延迟),我 用 Nix 实现了一个有点离谱的三角函数库 。我把三角函数库 发布到 GitHub 上 后,发现居然有人用!看来我的需求也不算太离谱。 在仓库的 Issues 里, 有用户建议我给这个数学库添加一些指数/对数函数支持 ,例如 exp , ln , pow 和 log 。 因为从零开始实现这些基础函数也挺有趣的,所以我就抽空研究了一下。这四个函数中,有些难度的是 exp 和 ln 。 pow 和 log 都可以用另外两个函数转化出来: log n x = ln x ln n p o w ( x , n ) = x n = exp ( n ∗ ln x ) \begin{aligned} \log_n x &= \frac{\ln x}{\ln n} \\ pow(x, n) = x^n &= \exp (n * \ln x) \end{aligned} lo g n x p o w ( x , n )...
用 Nix 编译自定义 Android 内核
前言 我现在使用的手机是 Motorola Edge+ 2023,一台 Android 手机。为了更好的自定义手机的功能,我解锁了手机的 Bootloader,并且获取了 Root 权限,以便安装 LSPosed 以及基于 LSPosed 的各种插件。 我使用的 Root 方案是 KernelSU ,通过修改 Linux 内核,从而允许且只允许指定程序获取 Root 权限。虽然 KernelSU 官方提供了适配大部分手机的 GKI 内核镜像,但我给手机刷了不兼容 GKI 的 LineageOS,所以只能自己编译内核。 由于直接修改内核镜像的难度较大,我们一般是从手机厂商获取以 GPLv2 协议开源的内核源码,按照 KernelSU 的官方教程 进行修改后,再编译成完整的内核。 注:现在有一种新的 Root 方案 APatch ,通过直接修改内核镜像来实现类似 KernelSU 的功能。我没试过 APatch,但如果你不想自己编译内核,可以尝试一下。 由于 KernelSU 使用广泛,有一些开发者编写了 GitHub Actions 的 Workflow,例如 https://github....

从零开始实现 Nix 三角函数库
从零开始实现 Nix 数学库 系列文章目录: 从零开始实现 Nix 三角函数库 (当前文章) 从零开始实现 Nix 对数函数库 (题图来自: 维基百科 - 三角函数 ) 起因 我想计算我的所有 VPS 节点之间的网络延迟,并把延迟写入 Bird BGP 服务端的配置中,以便让节点之间的数据转发经过延迟最低的路径。但是,我的节点截至今天有 17 个,我不想在节点之间手动两两 Ping 获取延迟。 于是我想了一种方法:标记所有节点所在物理地点的经纬度,根据经纬度计算物理距离,再将距离除以光速的一半即可获得大致的延迟。我随机抽样了几对节点,发现她们之间的路由都比较直,没有严重的绕路现象,此时物理距离就是一个可以满足我要求的近似值。 因为我的节点上用的都是 NixOS,统一使用 Nix 语言管理配置,所以我需要找到一种在 Nix 中计算这个距离的方法。一种常用的根据经纬度算距离的方法是半正矢公式(Haversine Formula),它将地球近似为一个半径为 6371 公里的球体,...