16得票5回答
80位扩展精度数据类型的应用/好处是什么?

是的,我想说的是80位。那不是打字错误... 我的浮点变量经验总是涉及4字节的倍数,比如单精度(32位)、双精度(64位)和长双精度(我见过的称为96位或128位)。这就是为什么当我在编写一些代码来读写AIFF(音频交换文件格式)文件时,遇到一个80位扩展精度数据类型时有点困惑:选择了扩展精...

9得票1回答
将扩展(80位)转换为字符串

如何将扩展精度浮点值转换为字符串? 背景 英特尔 CPU 支持三种浮点格式: 32 位 单精度 64 位 双精度 80 位 扩展精度 Delphi 对扩展精度浮点格式有本地支持。 扩展精度可分解为: 1 个符号位 15 个指数位 1 个整数部分位(即数字以 0. 或 1. 开...

24得票7回答
三个无符号整数的平均值的高效计算(避免溢出)

这里有一个现有问题, 是关于高效计算三个有符号整数平均值的。 但是,使用无符号整数可以实现一些额外的优化,而这些优化不适用于前一个问题的场景。这个问题是关于高效计算三个无符号整数平均值的,其中平均值向零舍入,即在数学上我想计算⌊ (a + b + c) / 3 ⌋。 一种直接计算此平均值的...

45得票1回答
OCaml中的80位扩展精度浮点数

是否有一个OCaml库可以利用IA-32和x86-64架构上的80位扩展精度浮点类型? 我知道关于MPFR绑定,但是我理想的库应该更加轻量级。利用历史浮点指令将是理想的。

12得票2回答
获取无符号长整型加法进位

我想在C中获取两个无符号的64位整数相加后的进位标志位。 如果需要,我可以使用x86-64汇编语言。 代码:#include <stdio.h> typedef unsigned long long llu; int main(void){ llu a = -1, b = ...

13得票2回答
C++处理多余精度

我目前正在研究 多精度浮点算术代码。为了正确工作,该代码需要在固定的时间点将值降低到最终精度。因此,即使中间结果已计算到80位扩展精度浮点寄存器,也必须在某个时刻舍入为64位双精度以进行后续操作。 该代码使用宏 INEXACT 描述此要求,但没有完美的定义。 gcc手册 提到-fexces...

17得票3回答
实用的大数AVX/SSE可能吗?

SSE/AVX寄存器可视为整数或浮点BigNum。也就是说,可以忽略存在通道的事实。是否存在一种简单的方法来利用这种观点,并将这些寄存器作为单个或组合的BigNum使用?我之所以问,是因为我很少看到BigNum库,它们几乎普遍存储和对数组进行算术运算,而不是在SSE/AVX寄存器上。可移植性呢...

52得票2回答
有没有一份描述Clang如何处理浮点数精度超出范围的文档?

使用仅允许使用387指令集的情况下,以合理的成本提供严格的IEEE 754语义几乎是不可能的(*). 特别是当希望保持FPU在完整的64位有效数字上工作,以便扩展精度long double类型可用时,这更难。通常的“解决方案”是在仅有可用精度的中间计算,并在更或多或少定义良好的情况下转换为较低...

8得票4回答
在MSVC中将扩展精度浮点数(80位)转换为双精度浮点数(64位)

什么是将扩展精度浮点数(80位值,也被某些编译器称为long double)转换为双精度浮点数(64位)所需的最便携和“正确”的方法,在MSVC win32/win64中? MSVC目前(截至2010年)假定long double是double的同义词。我可能可以在内联汇编中编写fld/fst...

12得票2回答
从双精度参数开始的80位扩展精度计算的属性

这里有两个插值函数的实现。参数u1始终在0.和1.之间。#include <stdio.h> double interpol_64(double u1, double u2, double u3) { return u2 * (1.0 - u1) + u1 * u3; ...