草庐IT

C++浮点精度

全部标签

c++ - NEON 浮点乘法比预期慢

我有两个float标签。我需要将第一个选项卡中的元素乘以第二个选项卡中的相应元素,并将结果存储在第三个选项卡中。我想使用NEON来并行化float乘法:同时进行四个float乘法而不是一个。我预计会有显着的加速,但我只实现了大约20%的执行时间减少。这是我的代码:#include#include#includeconstintn=100;//tablesize/*fillatabwithrandomfloats*/voidrand_tab(float*t){for(inti=0;i我运行以下命令进行编译:g++-mfpu=neon-ffast-mathneon_test.cpp我的CP

c++ - 从预乘浮点 RGBA 转换为 8 位 RGBA 的有效方法?

我正在寻找一种更有效的方法,将在预乘色彩空间中存储为double的RGBA转换为8位整数/channelRGBA非预乘色彩空间。这对我的图像处理来说是一项巨大的成本。对于一个channel,比如R,代码看起来像这样:doubletemp=alpha>0?src_r/alpha:0uint8_tout_r=(uint8_t)min(255,max(0,int(temp*255+0.5)))这涉及三个条件,我认为它们会阻止编译器/CPU尽可能地优化它。我认为某些芯片,特别是x86_64具有专门的双钳位操作,因此理论上上述可能无需条件就可以实现。是否有一些技术或特殊功能可以使这种转换更快?我

c++ - 为什么编译时浮点计算的结果可能与运行时计算的结果不同?

在constexpr:Introduction,演讲者提到“编译时浮点计算可能与运行时计算的结果不同”:而原因与“交叉编译”有关。老实说,我不太清楚这个想法。恕我直言,不同的平台也可能有不同的整数实现。为什么它只影响float?或者我错过了什么? 最佳答案 Whydoesitonlyaffectfloatingpoints?因为标准没有对浮点运算精度施加限制。根据expr.const,强调我的:[ Note:Sincethisdocumentimposesnorestrictionsontheaccuracyoffloating-p

c++ - 为什么 BigInt、BigNum 或任意精度算术没有出现在 STL 或 C++ 的标准库中?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。这有什么具体原因吗?这是设计决定吗?BignumberinC++与其他搜索结果一起显示为此编写的类。不知道以后的版本会不会包含这个功能。

c++ - SDL_GetTicks()精度在毫秒级以下

我目前使用SDL2编写程序。一切正常,但我对SDL_GetTicks()方法有疑问。通常它应该返回以毫秒为单位的总应用程序时间,但它总是在大多数情况下返回值0,有时返回值1。我用SDL_INIT_EVERYTHING标志初始化了SDL。以下代码的问题是循环太快,所以增量时间小于1毫秒。有没有办法达到更高的精度?#include"Application.hpp"voidApplication::Initialize(){intsdl_initialize_result=SDL_Init(SDL_INIT_EVERYTHING);if(sdl_initialize_result

c++ - 在 C++ 中使用 pow 时精度损失

10^1.64605=44.2639330165但是在C++中使用pow:doublep=pow(10,1.64605)returns44.2641.这里有办法提高精度吗?我尝试将两侧都转换为longdouble但这也没有帮助。比较有意思的是:cout输出是:-1.6460544.263944.2641为什么? 最佳答案 cout正在截断您的双倍显示,但由pow计算的值可能至少和你期望的一样精确。有关如何在控制台中显示更精确的信息,请参阅:HowdoIprintadoublevaluewithfullprecisionusingco

c++ - 散列任意精度值(boost::multiprecision::cpp_int)

我需要以任意精度获取一个值的散列值(来自Boost.Multiprecision);我用cpp_int后端。我想出了以下代码:boost::multiprecision::cpp_intx0=1;constautoseed=std::hash{}(x0.str());我不需要代码尽可能快,但我发现对字符串表示进行哈希处理非常笨拙。所以我的问题是双重的:保持任意精度,我可以更有效地散列值吗?也许我不应该坚持保持任意精度,我应该转换成一个我可以轻松散列的double(不过,我仍然会使用任意精度值进行哈希表所需的比较)? 最佳答案 您可以

c++ - 如何截断 XMM 寄存器中的浮点值

如何只获取float的整数部分?所以,我有一个float组:x[4]={5.0,13.0,25.0,41.0};我把它放在xmm0中,然后用它做sqrt。我还需要一个命令来帮助仅获取此sqrt的一部分。例如5的sqrt将是2.236068,我只需要2.0的答案代码:__asm{movupsxmm0,xsqrtpsxmm0,xmm0//hereneedsomecommandmovupsx,xmm0} 最佳答案 使用roundps是最简单的。舍入模式表在其他地方,但您需要舍入模式3(接近零)。只有当输入保证在某个范围内(大约0到4.6e

20240203在WIN10下使用GTX1080配置stable-diffusion-webui.git不支持float16精度出错的处理

20240203在WIN10下使用GTX1080配置stable-diffusion-webui.git不支持float16精度出错的处理2024/2/321:23缘起:最近学习stable-diffusion-webui.git,在Ubuntu20.04.6下配置SD成功。不搞精简版本:Miniconda了。直接上Anacoda!打开stable-diffusion-webui.git的时候报错:webui.batwebui-user.bat双击打开升级软件/包之后都会报错!NansException:AtensorwithallNaNswasproducedinUnet.Thiscould

当 SQL Server(mssql-jdbc) 遇上 BigDecimal → 精度丢失,真坑!

开心一刻  中午和哥们一起喝茶  哥们说道:晚上喝酒去啊  我:不去,我女朋友过生日  哥们瞪大眼睛看着我:你有病吧,充气的过什么生日  我生气到:有特么生产日期的好吧需求背景  系统对接了外部系统,调用外部系统的接口需要付费,一个接口一次调用付费0.03元  同一个月内,同一个接口最高付费25元  统计每个月的付费情况  需求清楚了不?不清楚?给大家举个案例  这下明白了吧  明白了需求,相信大家都会觉得很简单,不就是一个分组汇总吗?  客官说的对,但生活总会给我们一点 surprise   我们慢慢往下看环境准备   SQLServer 版本: SQLServer2017    MySQL