Hello 算法 1.0.0b4 C++版实际上,这是因为浮点数 float 采用了不同的表示方式。根据 IEEE 754 标准,32‑bit 长度的 float 由以下 部分构成: ‧ 符号位 S :占 1 bit 。 ‧ 指数位 E :占 8 bits 。 ‧ 分数位 N :占 24 bits ,其中 23 位显式存储。 设 32‑bit 二进制数的第 ? 位为 ?? ,则 float 值的计算方法定义为: val = (−1)?31 × 现在我们可以回答最初的问题:float 的表示方式包含指数位,导致其取值范围远大于 int 。根据以上计算, float 可表示的最大正数为 2254−127 × (2 − 2−23) ≈ 3.4 × 1038 ,切换符号位便可得到最小负数。 尽管浮点数 float 扩展了取值范围,但其副作用是牺牲了精度。整数类型 int 将全部 32 位用于表示数字,数 字是均匀分布的;而由于指数位的存在,浮点数 float 的数 的数值越大,相邻两个数字之间的差值就会趋向越 大。 进一步地,指数位 ? = 0 和 ? = 255 具有特殊含义,用于表示零、无穷大、NaN 等。 指数位 E 分数位 N = 0 分数位 N ≠ 0 计算公式 0 ±0 次正规数 (−1)S × 2−126 × (0.N) 1, 2, … , 254 正规数 正规数 (−1)S × 2(E−127) × (1.N) 255 ±∞ NaN0 码力 | 343 页 | 27.39 MB | 1 年前3
Hello 算法 1.1.0 C++ 版… ?2?1?0 根据 IEEE 754 标准,32‑bit 长度的 float 由以下三个部分构成。 ‧ 符号位 S :占 1 位,对应 ?31 。 ‧ 指数位 E :占 8 位,对应 ?30?29 … ?23 。 ‧ 分数位 N :占 23 位,对应 ?22?21 … ?0 。 二进制数 float 对应值的计算方法为: val = (−1)?31 × 2(?30?29…?23)2−127 现在我们可以回答最初的问题:float 的表示方式包含指数位,导致其取值范围远大于 int 。根据以上计算, float 可表示的最大正数为 2254−127 × (2 − 2−23) ≈ 3.4 × 1038 ,切换符号位便可得到最小负数。 尽管浮点数 float 扩展了取值范围,但其副作用是牺牲了精度。整数类型 int 将全部 32 比特用于表示数字, 数字是均匀分布的;而由于指数位的存在,浮点数 float 的 的数值越大,相邻两个数字之间的差值就会趋向越 大。 如表 3‑2 所示,指数位 E = 0 和 E = 255 具有特殊含义,用于表示零、无穷大、NaN 等。 表 3‑2 指数位含义 指数位 E 分数位 N = 0 分数位 N ≠ 0 计算公式 0 ±0 次正规数 (−1)S × 2−126 × (0.N) 1, 2, … , 254 正规数 正规数 (−1)S × 2(E−127) ×0 码力 | 379 页 | 18.47 MB | 1 年前3
Hello 算法 1.0.0b5 C++版1?0 根据 IEEE 754 标准,32‑bit 长度的 float 由以下三个部分构成。 ‧ 符号位 S :占 1 bit ,对应 ?31 。 ‧ 指数位 E :占 8 bits ,对应 ?30?29 … ?23 。 ‧ 分数位 N :占 23 bits ,对应 ?22?21 … ?0 。 二进制数 float 对应的值的计算方法: val = (−1)?31 × 2(?30?29… 现在我们可以回答最初的问题:float 的表示方式包含指数位,导致其取值范围远大于 int 。根据以上计算, float 可表示的最大正数为 2254−127 × (2 − 2−23) ≈ 3.4 × 1038 ,切换符号位便可得到最小负数。 尽管浮点数 float 扩展了取值范围,但其副作用是牺牲了精度。整数类型 int 将全部 32 位用于表示数字,数 字是均匀分布的;而由于指数位的存在,浮点数 float 的数 的数值越大,相邻两个数字之间的差值就会趋向越 大。 如表 3‑2 所示,指数位 ? = 0 和 ? = 255 具有特殊含义,用于表示零、无穷大、NaN 等。 表 3‑2 指数位含义 指数位 E 分数位 N = 0 分数位 N ≠ 0 计算公式 0 ±0 次正规数 (−1)S × 2−126 × (0.N) 1, 2, … , 254 正规数 正规数 (−1)S × 2(E−127) × (10 码力 | 377 页 | 30.69 MB | 1 年前3
Hello 算法 1.0.0 C++版… ?2?1?0 根据 IEEE 754 标准,32‑bit 长度的 float 由以下三个部分构成。 ‧ 符号位 S :占 1 位,对应 ?31 。 ‧ 指数位 E :占 8 位,对应 ?30?29 … ?23 。 ‧ 分数位 N :占 23 位,对应 ?22?21 … ?0 。 二进制数 float 对应值的计算方法为: val = (−1)?31 × 2(?30?29…?23)2−127 现在我们可以回答最初的问题:float 的表示方式包含指数位,导致其取值范围远大于 int 。根据以上计算, float 可表示的最大正数为 2254−127 × (2 − 2−23) ≈ 3.4 × 1038 ,切换符号位便可得到最小负数。 尽管浮点数 float 扩展了取值范围,但其副作用是牺牲了精度。整数类型 int 将全部 32 比特用于表示数字, 数字是均匀分布的;而由于指数位的存在,浮点数 float 的 的数值越大,相邻两个数字之间的差值就会趋向越 大。 如表 3‑2 所示,指数位 ? = 0 和 ? = 255 具有特殊含义,用于表示零、无穷大、NaN 等。 表 3‑2 指数位含义 指数位 E 分数位 N = 0 分数位 N ≠ 0 计算公式 0 ±0 次正规数 (−1)S × 2−126 × (0.N) 1, 2, … , 254 正规数 正规数 (−1)S × 2(E−127) ×0 码力 | 378 页 | 17.59 MB | 1 年前3
Hello 算法 1.2.0 简体中文 C++ 版… ?2?1?0 根据 IEEE 754 标准,32‑bit 长度的 float 由以下三个部分构成。 ‧ 符号位 S :占 1 位,对应 ?31 。 ‧ 指数位 E :占 8 位,对应 ?30?29 … ?23 。 ‧ 分数位 N :占 23 位,对应 ?22?21 … ?0 。 二进制数 float 对应值的计算方法为: val = (−1)?31 × 2(?30?29…?23)2−127 现在我们可以回答最初的问题:float 的表示方式包含指数位,导致其取值范围远大于 int 。根据以上计算, float 可表示的最大正数为 2254−127 × (2 − 2−23) ≈ 3.4 × 1038 ,切换符号位便可得到最小负数。 尽管浮点数 float 扩展了取值范围,但其副作用是牺牲了精度。整数类型 int 将全部 32 比特用于表示数字, 数字是均匀分布的;而由于指数位的存在,浮点数 float 的 的数值越大,相邻两个数字之间的差值就会趋向越 大。 如表 3‑2 所示,指数位 E = 0 和 E = 255 具有特殊含义,用于表示零、无穷大、NaN 等。 表 3‑2 指数位含义 指数位 E 分数位 N = 0 分数位 N ≠ 0 计算公式 0 ±0 次正规数 (−1)S × 2−126 × (0.N) 1, 2, … , 254 正规数 正规数 (−1)S × 2(E−127) ×0 码力 | 379 页 | 18.48 MB | 10 月前3
C++高性能并行编程与优化 - 课件 - 12 从计算机组成原理看 C 语言指针• 11111111 + 00000010 = 100000001 • 正好和普通的二进制加法一样,只需要丢弃最前面的那一位进位就可以了。 • 这样就重用了现有的无符号加法器,从而节省了宝贵的电路板空间。 • 补码和反码一样,让有符号整数可以表示 -128 到 127 。 • 其中负数的范围反而比正数大是因为要回避 -0 。 字节的单位: KB , MB , GB , TB • 计算机中规定“一千”是 int 。 浮点与标准库数学函数 浮点数的二进制表示 • float 由 4 个字节组成,也就是 32 个位。 • 最高位是符号位,接着的 8 位是指数位 (e) 。 • 剩下的 23 位是底数位 (m) 。 • 值得注意的是指数位 (e) 是 +127 以后表示的。 • 浮点数实际表示的值是 • ± 1.mmmmmmm 2^e • 类似于人类的科学计数法,不过是二进制。 著名的“快速浮点平方根算法” 这个算法是 99 年被人从一个游戏源码中扒 出来的,作者号称是游戏界的大神卡马克 ,但是追根溯源,貌似这个算法存在的还 要更久远,原始作者已不可考,暂且称为 卡马克算法。 • 实际上就是把指数位除以了 2 ,作为牛顿 迭代的初始猜测值而已。看他的 i >> 1 这 里,就是把指数和底数都移动了 1 (因为 符号始终是无符号,底数影响不大)。 abs 函数:取出绝对值 • 可以用 abs0 码力 | 128 页 | 2.95 MB | 1 年前3
Hello 算法 1.0.0b1 C++版其实,这是因为浮点数 float 采用了不同的表示方式。IEEE 754 标准规定,32‑bit 长度的 float 由以下部分构 成: ‧ 符号位 S :占 1 bit ; ‧ 指数位 E :占 8 bits ; ‧ 分数位 N :占 24 bits ,其中 23 位显式存储; 设 32‑bit 二进制数的第 ? 位为 ?? ,则 float 值的计算方法定义为 val = (−1)?31 × 2( 现在我们可以回答开始的问题:float 的表示方式包含指数位,导致其取值范围远大于 int 。根据以上计算, float 可表示的最大正数为 2254−127 × (2 − 2−23) ≈ 3.4 × 1038 ,切换符号位便可得到最小负数。 浮点数 float 虽然拓展了取值范围,但副作用是牺牲了精度。整数类型 int 将全部 32 位用于表示数字,数字 是均匀分布的;而由于指数位的存在,浮点数 float 的数 的数值越大,相邻两个数字之间的差值就会趋向越大。 进一步地,指数位 ? = 0 和 ? = 255 具有特殊含义,用于表示零、无穷大、NaN 等。 指数位 E 分数位 N = 0 分数位 N ≠ 0 计算公式 0 ±0 次正规数 (−1)S × 2−126 × (0.N) 1, 2, … , 254 正规数 正规数 (−1)S × 2(E−127) × (1.N) 255 ±∞ NaN 特别地,次正规数显著提升了小数精度:0 码力 | 187 页 | 14.71 MB | 1 年前3
Hello 算法 1.0.0b2 C++版其实,这是因为浮点数 float 采用了不同的表示方式。IEEE 754 标准规定,32‑bit 长度的 float 由以下部分构 成: ‧ 符号位 S :占 1 bit ; ‧ 指数位 E :占 8 bits ; ‧ 分数位 N :占 24 bits ,其中 23 位显式存储; 设 32‑bit 二进制数的第 ? 位为 ?? ,则 float 值的计算方法定义为 val = (−1)?31 × 2( 现在我们可以回答开始的问题:float 的表示方式包含指数位,导致其取值范围远大于 int 。根据以上计算, float 可表示的最大正数为 2254−127 × (2 − 2−23) ≈ 3.4 × 1038 ,切换符号位便可得到最小负数。 浮点数 float 虽然拓展了取值范围,但副作用是牺牲了精度。整数类型 int 将全部 32 位用于表示数字,数字 是均匀分布的;而由于指数位的存在,浮点数 float 的数 的数值越大,相邻两个数字之间的差值就会趋向越大。 进一步地,指数位 ? = 0 和 ? = 255 具有特殊含义,用于表示零、无穷大、NaN 等。 指数位 E 分数位 N = 0 分数位 N ≠ 0 计算公式 0 ±0 次正规数 (−1)S × 2−126 × (0.N) 1, 2, … , 254 正规数 正规数 (−1)S × 2(E−127) × (1.N) 255 ±∞ NaN 特别地,次正规数显著提升了小数精度:0 码力 | 197 页 | 15.72 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 10 从稀疏数据结构到量化数据类型biancheng.net/view/314.html 以求最大值为案例 用定点数来表示 • 刚刚说到浮点数的特性是有指数位,可表示不同数量级上的数。 • 比如 123.4 实际上是 1.234 * 10^2 ,也就是他实际存储的是 234 (底数)和 2 (指数)。 • 而定点数则没有指数位。而是规定好一个固定的系数,比如 100 。 • 那么 123.4 就存储为 12340 (底数),而指数是事先规定好的0 码力 | 102 页 | 9.50 MB | 1 年前3
Hello 算法 1.2.0 繁体中文 C++ 版,即 ? 為短板、? 為長板。 第 15 章 貪婪 www.hello‑algo.com 353 圖 15‑8 初始狀態 如圖 15‑9 所示,若此時將長板 ? 向短板 ? 靠近,則容量一定變小。 這是因為在移動長板 ? 後,寬度 ? − ? 肯定變小;而高度由短板決定,因此高度只可能不變(? 仍為短板)或 變小(移動後的 ? 成為短板)。 圖 15‑9 向內移動長板後的狀態 反向思考,我們只有向內收縮短板 指標相遇。 圖 15‑11 展示了貪婪策略的執行過程。 1. 初始狀態下,指標 ? 和 ? 分列陣列兩端。 2. 計算當前狀態的容量 ???[?, ?] ,並更新最大容量。 3. 比較板 ? 和板 ? 的高度,並將短板向內移動一格。 4. 迴圈執行第 2. 步和第 3. 步,直至 ? 和 ? 相遇時結束。 第 15 章 貪婪 www.hello‑algo.com 355 圖 15‑11 &ht) { // 初始化 i, j,使其分列陣列兩端 int i = 0, j = ht.size() - 1; // 初始最大容量為 0 int res = 0; // 迴圈貪婪選擇,直至兩板相遇 第 15 章 貪婪 www.hello‑algo.com 356 while (i < j) { // 更新最大容量 int cap = min(ht[i], ht[j]) * (j -0 码力 | 379 页 | 18.79 MB | 10 月前3
共 13 条
- 1
- 2













