是的,我想说的是80位。那不是打字错误... 我的浮点变量经验总是涉及4字节的倍数,比如单精度(32位)、双精度(64位)和长双精度(我见过的称为96位或128位)。这就是为什么当我在编写一些代码来读写AIFF(音频交换文件格式)文件时,遇到一个80位扩展精度数据类型时有点困惑:选择了扩展精...
如何将扩展精度浮点值转换为字符串? 背景 英特尔 CPU 支持三种浮点格式: 32 位 单精度 64 位 双精度 80 位 扩展精度 Delphi 对扩展精度浮点格式有本地支持。 扩展精度可分解为: 1 个符号位 15 个指数位 1 个整数部分位(即数字以 0. 或 1. 开...
这里有一个现有问题, 是关于高效计算三个有符号整数平均值的。 但是,使用无符号整数可以实现一些额外的优化,而这些优化不适用于前一个问题的场景。这个问题是关于高效计算三个无符号整数平均值的,其中平均值向零舍入,即在数学上我想计算⌊ (a + b + c) / 3 ⌋。 一种直接计算此平均值的...
是否有一个OCaml库可以利用IA-32和x86-64架构上的80位扩展精度浮点类型? 我知道关于MPFR绑定,但是我理想的库应该更加轻量级。利用历史浮点指令将是理想的。
我想在C中获取两个无符号的64位整数相加后的进位标志位。 如果需要,我可以使用x86-64汇编语言。 代码:#include <stdio.h> typedef unsigned long long llu; int main(void){ llu a = -1, b = ...
我目前正在研究 多精度浮点算术代码。为了正确工作,该代码需要在固定的时间点将值降低到最终精度。因此,即使中间结果已计算到80位扩展精度浮点寄存器,也必须在某个时刻舍入为64位双精度以进行后续操作。 该代码使用宏 INEXACT 描述此要求,但没有完美的定义。 gcc手册 提到-fexces...
SSE/AVX寄存器可视为整数或浮点BigNum。也就是说,可以忽略存在通道的事实。是否存在一种简单的方法来利用这种观点,并将这些寄存器作为单个或组合的BigNum使用?我之所以问,是因为我很少看到BigNum库,它们几乎普遍存储和对数组进行算术运算,而不是在SSE/AVX寄存器上。可移植性呢...
使用仅允许使用387指令集的情况下,以合理的成本提供严格的IEEE 754语义几乎是不可能的(*). 特别是当希望保持FPU在完整的64位有效数字上工作,以便扩展精度long double类型可用时,这更难。通常的“解决方案”是在仅有可用精度的中间计算,并在更或多或少定义良好的情况下转换为较低...
什么是将扩展精度浮点数(80位值,也被某些编译器称为long double)转换为双精度浮点数(64位)所需的最便携和“正确”的方法,在MSVC win32/win64中? MSVC目前(截至2010年)假定long double是double的同义词。我可能可以在内联汇编中编写fld/fst...
这里有两个插值函数的实现。参数u1始终在0.和1.之间。#include <stdio.h> double interpol_64(double u1, double u2, double u3) { return u2 * (1.0 - u1) + u1 * u3; ...