草庐IT

C++浮点精度

全部标签

c++ - 空间中的旋转 vector 和 C++ 中的高精度

这是我在C++中计算3D旋转的函数,该旋转由围绕轴的辐射角度定义。Vectorrotate(constVector&axis,constVector&input,constdoubleangle){doublenorm=1/axis.norm();if(norm!=1)axis*=norm;doublecos=std::cos(angle);doublemcos=1-cos;doublesin=std::sin(angle);doubler1[3];doubler2[3];doubler3[3];doublet_x,t_ymt_z;r1[0]=cos+std::pow(axis.x,2

c++ - 平方差的数值精度

在我的代码中,我经常计算类似下面的部分(为简单起见,此处为C代码):floatcos_theta=/*somesimpleoperations;nocosfcall!*/;floatsin_theta=sqrtf(1.0f-cos_theta*cos_theta);//Option1对于此示例,请忽略平方根的自变量由于不精确而可能为负数。我通过额外的fdimf调用修复了这个问题。但是,我想知道以下是否更准确:floatsin_theta=sqrtf((1.0f+cos_theta)*(1.0f-cos_theta));//Option2cos_theta介于-1和+1之间,因此对于每个

单片机AT89C51六位(四位和两位)数码管秒表精度0.01s带启动、暂停、清零按钮

1.设计方案本文主要研究基于单片机的秒表设计,主要是控制电路设计,数码管显示的设计,和软件程序的编写。该计时采用单片机定时器精确延时,秒表计时精度0.01秒。有启动,暂停,复位,提醒等功能。2.设计任务设计精度为0.01S的秒表系统;用3个按键设置启动、暂停、清零按钮;秒表的最长计时长度为9:59:59,超过此长度,报警。设计每一分钟都有提醒功能。3.总体框架4.主程序流程图5.仿真原理图开始计时,并且在一分钟时间蜂鸣器发出一声6.相关程序ucharcodesmgduan0[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示

c++ - a/b == ka/kb 上没有浮点错误吗?

这是我的简单代码。intnum1,num2;cin>>num1>>num2;intnum3,num4;cin>>num3>>num4;doubleresult1=static_cast(num1)/num2;doubleresult2=static_cast(num3)/num4;cout.setf(ios::boolalpha);cout输入:1326输出:true所以我想知道static_cast(a)/b==static_cast(k*a)/(k*b)总是正确的?如果没有,intnum1,num2;cin>>num1>>num2;intnum3,num4;cin>>num3>>n

c++ - x87浮点控制字的初值是如何定义的?

x87浮点控制字的值可以用_control87检查。当一个新线程启动时,在我的平台上它似乎从父线程继承浮点控制字的值。这是未定义的行为,还是我保证如果我启动一个新线程,并且线程库没有错误,控制字的值与父线程中的值相同?这种行为是在哪个标准中定义的,如何定义的?如果没有在任何标准中定义,它是否在处理器手册或操作系统文档中定义?我正在使用C++语言,在64位Windows7上开发,为32位Windows目标编译,并使用x86兼容处理器执行代码。我需要一个专门针对该平台的答案,但如果所有语言和处理器的行为都相同,那么通用答案会更好。 最佳答案

c++ - 如何以最高精度存储 double

我有点难以存储具有最大可用精度的数字:doubletmp=569.232306826889043804840184748172760009765625L;我正在尝试将其打印在屏幕上:printf("%0.52f\n",tmp);这就是我所拥有的:569.2323068268890400000000000000000000000000000000000000这是我能达到的最大精度吗?附言我正在使用VisualStudio2008 最佳答案 double通常存储在IEEE754binary64中格式。binary64具有52位精度,而不

C++如何避免浮点运算错误

这个问题在这里已经有了答案:Isfloatingpointmathbroken?(31个答案)关闭2年前。我正在编写一个以float递增的循环,但我遇到了一个浮点运算问题,如下例所示:for(floatvalue=-2.0;value这是输出:-2-1.8-1.6-1.4-1.2-1-0.8-0.6-0.4-0.21.46031e-070.20.40.60.811.21.41.61.8为什么我得到的是1.46031e-07而不是0?我知道这与浮点错误有关,但我无法理解为什么会发生这种情况以及我应该采取什么措施来防止这种情况发生(如果有办法的话)。有人可以解释(或指向一个链接)来帮助我理

c++ - 强制转换和赋值真的会剥夺 float 的额外精度吗?

我正在通读newC++FAQ我看到即使x==y为doublex,y;也有可能:std::cos(x)==std::cos(y)评估为false。这是因为机器可以有一个支持扩展精度的处理器,例如==的一部分是64位数字,而另一部分是80位数字。但是,下一个例子似乎不正确:voidfoo(doublex,doubley){doublecos_x=cos(x);doublecos_y=cos(y);//thebehaviormightdependonwhat'sinhereif(cos_x!=cos_y){std::cout据我readonen.cppreference.comhere:Ca

c++ - 浮点除法的软件实现,舍入问题

作为一个学习项目,我正在使用C++在软件中实现浮点运算(add、sub、mul、div)。目标是更加熟悉浮点行为的底层细节。我正在尝试将我的处理器操作与精确位匹配,即IEEE754标准。到目前为止,它一直运行良好,add、sub和mult表现完美,我对它进行了大约1.1亿次随机操作测试,并得到了与处理器在硬件中所做的完全相同的结果。(虽然没有考虑边缘情况、溢出等)。之后,我开始移动到最后一个操作,除法。它工作正常并达到了想要的结果,但有时我会把最后一个尾数弄错,而不是四舍五入。我很难理解为什么。我一直在使用的主要引用是来自JohnFarrier的精彩演讲(时间戳位于显示如何舍入的位置)

多标签分类keras的怪异精度

我有一个多标签分类问题,我使用了以下代码,但是验证精度在第一个时期内跳到了99%,鉴于数据的复杂性,这很奇怪,因为输入功能是从Inception模型(pool3:0)层提取的2048,并且标签为[1000],(这是文件的链接包含功能和标签示例:https://drive.google.com/file/d/0bxi_8po3ybppykp6dhlgeexps1k/view?usp=sharing),我在这里做错了吗?注意:标签稀疏向量仅包含1〜10个条目,其余为零model.compile(optimizer='adadelta',loss='binary_crossentropy',metr