openFrameworks 中实现 C++20 std::numbers 的数学常量支持
2025-05-23 03:13:30作者:伍霜盼Ellen
在 openFrameworks 的最新开发中,项目团队决定在 of::numbers 命名空间中实现对 C++20 标准库 std::numbers 的数学常量支持。这一改进为开发者提供了更便捷的数学常量访问方式,同时也保持了与最新 C++ 标准的兼容性。
背景与动机
C++20 标准引入了 头文件,其中定义了一系列常用的数学常量,如圆周率 π、自然对数的底 e 等。这些常量以高精度的浮点数值形式提供,方便开发者在科学计算、图形编程等场景中使用。
openFrameworks 作为一个创意编码框架,经常需要处理各种数学运算和图形计算。在此之前,开发者可能需要自己定义这些常量或从其他库中引入。通过将 std::numbers 的功能集成到 of::numbers 中,openFrameworks 为开发者提供了更统一、更标准的解决方案。
实现细节
在实现上,openFrameworks 选择在 of 命名空间下创建 numbers 子命名空间,以"兼容"(compatible)的方式重新导出 std::numbers 中的常量。这种设计有几个优点:
- 保持了与 C++ 标准库的一致性
- 提供了 openFrameworks 特有的命名空间组织方式
- 未来可以方便地扩展额外的数学常量
- 保持了向后兼容性
使用示例
开发者现在可以像下面这样使用这些数学常量:
#include "ofMath.h"
void setup() {
float radius = 5.0f;
float circumference = 2 * of::numbers::pi * radius;
ofLog() << "圆的周长: " << circumference;
}
包含的数学常量
of::numbers 中包含了 std::numbers 定义的所有常用数学常量,例如:
- pi: 圆周率 π (3.141592653589793...)
- e: 自然对数的底 e (2.718281828459045...)
- log2e: 以 2 为底的 e 的对数
- sqrt2: 2 的平方根
- phi: 黄金比例 (1.618033988749895...)
对开发者的意义
这一改进使得 openFrameworks 的数学处理能力更加现代化和标准化。开发者可以:
- 减少自定义常量的需求,降低出错概率
- 获得更高精度的数学常量
- 编写更符合现代 C++ 标准的代码
- 更容易将 openFrameworks 代码与其他现代 C++ 项目集成
未来展望
随着 C++ 标准的演进,openFrameworks 可能会继续引入更多标准库中的数学相关功能。这种"兼容"实现方式也为框架未来的扩展提供了良好的模式,既保持了与标准的兼容性,又维护了框架自身的一致性。
这一改进虽然看似简单,但它体现了 openFrameworks 项目对代码质量和开发者体验的持续关注,是框架现代化进程中的又一重要步骤。
登录后查看全文
热门项目推荐
相关项目推荐
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0191
cann-learning-hubCANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。Jupyter Notebook0118
Step-3.7-FlashStep-3.7-Flash是一个拥有 1980 亿参数的稀疏混合专家(MoE)视觉语言模型,由 1960 亿参数的语言主干网络和 18 亿参数的视觉编码器组合而成,具备原生图像理解能力。Python00
JoyAI-EchoJoyAI-Echo,这是一个独立的、仅用于推理的版本,旨在实现分钟级多镜头音视频生成。它采用了经过蒸馏的DMD生成器、配对的跨模态记忆以及故事级别的一致性。其性能的核心在于,一个跨模态视听记忆库能够在长达五分钟的视频中保持角色外观和语音音色的一致性。同时,一个训练后处理流程将基于记忆的强化学习与分布匹配蒸馏相结合,实现了7.5倍的速度提升,显著增强了视觉质量和对齐效果。00
fun-rec推荐系统入门教程,在线阅读地址:https://datawhalechina.github.io/fun-rec/Python03
so-large-lm大模型基础: 一文了解大模型基础知识01
项目优选
收起
暂无描述
Dockerfile
764
4.98 K
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
857
1.93 K
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
683
1.33 K
Ascend Extension for PyTorch
Python
719
880
deepin linux kernel
C
32
16
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
457
439
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.08 K
1.1 K
华为昇腾面向大规模分布式训练的多模态大模型套件,支撑多模态生成、多模态理解。
Python
151
252
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
305
118
昇腾LLM分布式训练框架
Python
178
221