我们可以将1.0表示为2 ^ 0 x 1.0,将小于1.0的最大可表示数表示为k,其中k = 2 ^ 0 x 0.111 ....... 1截断为拟合.
然后差值或ulp为1.0 - k = 2 ^ 0 x 0.00000 ..... 1.
与机器epsilon不同,我们有N epsilon = 2 ^ 0 x 1.000000 .... 1 - 2 ^ 0 x 1.000 = 2 ^ 0 x 0.000 ..... 1?
为什么正确的值是一半?
另外,如何计算除1.0以外的值的ulp?
在这里,我从浮点变量中减去128.0和129.0倍.
#include "stdafx.h"
#include<stdlib.h> //is this the problem? Or am i doing something wrong?
int main()
{
float d1=3.0e9;
printf("\n before: %f \n",d1);
for(int i=0;i<2000000;i++) d1=d1-128.0; //doesnt change!
printf("\n after : %f \n",d1);
for(int i=0;i<2000000;i++) d1=d1-129.0; //does change!
printf("\n after2: %f \n",d1);
//is 129 is the minimum step for sub/add ? Isnt this wrong?
//Is this about exponential part 10^9 ?
getchar();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:

问题:为什么这个浮点数不会因为小于129的操作数添加/ subbing而改变?因为我选择初始浮动值3.0e9?
当我选择初始值3.0e10时,初始化和两次减法都不起作用.
当我选择初始值3.0e8时,最小变化为17.所以16不会改变.:(
所以,谢谢你的回答.当初始值变小时,最小步长会根据精度变小.
VC++ 2010表达.windows xp 32位.奔腾-M
我有这样的问题:
char *ptr;
float f1 = 12.34;
Run Code Online (Sandbox Code Playgroud)
现在使用这个char*ptr,我想将这个float值转换为string,可以使用这个指针"ptr"在printf中显示.
表示:12.34 ==>"12.34"
我不需要使用任何其他指针或临时变量.我不能用snprintf.
假设我有一个输入1.251564.
如何找到"."输出后有多少元素,如下所示:
int numFloating;
// code to go here that leads to
// numFloating == 6
Run Code Online (Sandbox Code Playgroud)
ps很抱歉没有提供任何代码,我只是不知道应该如何实现:(
谢谢你的回答!
double a1;
a1 = Math.Pow(somehighnumber, 40);
something.Text = Convert.ToString(xyz);
Run Code Online (Sandbox Code Playgroud)
我得到的结果是E + 41等,它像1,125123E + 41等我不明白为什么.
我正在尝试输出一个浮点数
printf(theFloat);
Run Code Online (Sandbox Code Playgroud)
但是,这给了我以下错误。
““float”类型的参数与“const char *”类型的参数不兼容”
我不确定为什么这不起作用,我查看了一下,发现人们使用printf格式化浮点数...是否还有另一种用于浮点数等的打印方法?

如图所示,rotCount为1.0f.但是,当将rotCount与0.0f进行比较时,调试器会输入if语句,这不应该发生.
我使用Visual Studio 2010的默认调试模式,优化关闭.这是这段代码的拆卸.

似乎在fcomp之后,没有生成测试和跳转汇编代码.这被认为是VS2010中的错误吗?谁知道为什么?