草庐IT

精确度

全部标签

c++ - 比 double 更精确的 float 据类型?

在我的项目中,我必须计算double元素矩阵的除法、乘法、减法和加法。问题是,当矩阵的大小增加时,我的输出精度会受到极大影响。目前,我对每个元素使用double,我认为它使用8字节的内存并且具有16位的精度,无论小数点位置如何。即使对于大尺寸矩阵,所有元素占用的内存也在几千字节的范围内。所以我可以负担得起使用需要更多内存的datatypes。所以我想知道哪种数据类型比double更精确。我试着在一些书中搜索,我可以找到longdouble。但我不知道它的精度是多少。如果我想要比这更高的精度怎么办? 最佳答案 根据维基百科,80位“I

c++ - 精确为零的 float / double 相等

我有一个算法,它使用floats或doubles来执行一些计算。例子:doublea;doubleb;doublec;...doubleresult=c/(b-a);if((result>0)&&(result现在,我担心(b-a)可能为零。如果它接近于零但不为零,那没关系,因为result将超出有用范围,而且我已经检测到(如(b-a)接近零,result将接近+/-inf,这不在范围0-small_number...)但是如果(b-a)的结果恰好为零,我预计由于被零除会发生一些依赖于平台的事情。我可以将if语句更改为:if((!((b-a)==0.0))&&((result=c/(b

C++ 计算比 double 或 long double 更精确

我正在自学C++和thispracticequestion它要求编写可以将PI计算为>30位的代码。我了解到double/longdouble在我的电脑上都是16位数字。我认为这个问题的教训是能够计算出超出可用范围的精度。因此,我该怎么做?可能吗?我现在计算Pi的代码是#include"stdafx.h"#include#include#includeusingnamespacestd;intmain(){doublepi;pi=4*atan(1.0);cout输出到16位和pi到30位比较如下。3.14159265358979313.1415926535897932384626433

c++ - 如果硬编码 float 可以用 IEEE 754 中的二进制格式表示,它是否精确?

例如,0、0.5、0.15625、1、2、3...是从IEEE754转换而来的值。它们的硬编码版本是否精确?例如:是floata=0;if(a==0){returntrue;}总是返回真?其他例子:floata=0.5;floatb=0.25;floatc=0.125;a*b是否总是等于0.125而a*b==c总是为真?还有一个例子:inta=123;floatb=0.5;a*b总是61.5吗?或者一般来说,整数乘以IEEE754二进制float是否精确?或者一个更普遍的问题:如果值是硬编码的,并且值和结果都可以用IEEE754中的二进制格式表示(例如:0.5-0.125),那么该值是

c++ - 警告不精确的浮点常量

像“为什么不是0.1+0.1+0.1+0.1+0.1+0.1+0.1+0.1=0.8?”这样的问题让我想到了.........让编译器警告它四舍五入到二进制浮点类型中最接近的可表示的浮点常量可能会很好(例如0.1和0.8在radix-2float中四舍五入,否则他们将需要无限量的空间来存储无限数量的数字)。我查看了gcc警告,到目前为止没有找到用于此目的的警告(-Wall、-Wextra、-Wfloat-equal、-Wconversion、-Wcoercion(不支持或仅限C?)、-Wtraditional(仅限C)似乎没有做我想做的事情想要)。我也没有在MicrosoftVisua

c# - 实现实时 1 毫秒精确事件而不受线程调度的影响

问题我正在创建一个基于Windows7的C#WPF应用程序使用.Net4.5,其主要特点之一是调用某些与自定义硬件接口(interface)的函数具有一组用户定义的循环时间。例如,用户可能会选择每10或20毫秒调用两个函数以及每500毫秒调用另一个函数。用户可选择的最小循环时间为1毫秒。起初,时间似乎是准确的,并且根据需要每1毫秒调用一次函数。但是我们后来注意到关于1-2%的时间不准确,有些函数被调用仅延迟5毫秒,而其他函数可能延迟达到100毫秒。即使循环时间大于1毫秒,我们也面临线程休眠的问题,它应该调用外部函数(一个20毫秒的函数可能会延迟50毫秒调用,因为线程正在休眠并且没有调用

.net - Windows 播放音频的准确度(就时间而言)如何?

假设我播放了一个包含317,520,000个样本的立体声WAV文件,理论上1小时。假设播放没有中断,文件是否会在正好一个小时内完成播放,或者播放速度是否偶尔会有一些微小的变化,以至于它会稍微多一点或少一点(以一定数量的毫秒)比一小时?我正在尝试将动画与音频同步,并且我正在使用System.Diagnostics.Stopwatch来保持帧与音频匹配。但是,如果Windows中WAV音频的播放速度随时间略有变化,则音频将与秒表驱动的动画不同步。这引出了第二个问题:看起来秒表-虽然在短时间内高度精细和准确-运行速度稍快。在我的笔记本电脑上,秒表运行整整24小时(根据计算机的系统时间和真正的

windows - 将代码移入内核空间会提供更精确的计时吗?

背景资料:我目前有一个连接到USB端口的硬件设备。硬件设备负责将精确的周期性消息发送到它反过来连接的各种网络上。在硬件设备内部,我有几个MicrochipdsPIC。有两种操作模式。一种情况是将简单的“作业”向下发送到dsPIC,而dsPIC又可以以0.001毫秒的精度发送精确消息。这种架构对于更复杂的消息传递来说并不理想,在这种情况下,我们需要发送一个周期性的数据包,该数据包会根据PC应用程序中发生的事件发生变化。所以我们有第二种操作模式,我们的PC应用程序将发送周期性消息,而dsPIC只需转换并发送响应。顺便说一句,所有这些对我们软件的最终用户都是透明的。我们的硬件设备是用于汽车领

c# - 使用 GDI+ 绘制文本时是否可以定义精确的字体大小?

我正在使用以下代码在位图上绘制文本:using(Fontfont=newFont("Arial",10.0f,FontStyle.Bold,GraphicsUnit.Point)){//drawthetextgraphics.DrawString("Sometext",font,Brushes.White,rect,stringFormat);}效果不错。这是呈现的文本:我想让文字变大一点。如果我将11设置为字体大小,这就是我得到的:对于我想要的来说它太大了。我尝试了10.25、10.5等,但结果与10相同。我也尝试将GraphicsUnit设置为Pixel但它的行为相同(无法设置自定

c++ - 如何使用 DrawText 查找在 Windows 中呈现的文本的精确像素高度

我希望找到在Windows中呈现的文本的确切高度。我尝试了GetTextExtentPoint32和使用DT_CALCRECT标志调用DrawText,两者都给出了相同的结果。似乎返回的高度是基于完整的单元格高度,而不考虑实际要绘制的文本。下面的代码是标准VisualStudio2013Win32项目的WM_PAINT处理程序。它创建一个(大)字体并绘制示例文本。文本的最高部分是98像素,但GetTextExtentPoint32返回的值为131。我意识到有些应用程序可能需要完整的单元格高度,但有些应用程序(比如我的)只需要文本使用的实际高度。有谁知道如何找到这些信息?是的,我可以渲染