Tag: double

有没有人知道atolf c函数?

我正在寻找一个类似于atol (char *到long int)但atofl (char到long double)的函数,有没有人知道这样做的库,或者一个简单的方法来执行此操作,因为在“0.00000005”上使用atof抛弃了5? 谢谢。

浮点算术的最佳实践

我正在对小数点输入执行加法和减法,精确到小数点后第二位。 我试图通过乘以100将它们转换为整数来提高准确度,但却达到了相反的效果。 请考虑以下代码和输出: double d = 2.01; int a = (int) (d * 100.0); cout << a << endl; 输出是: 200 一劳永逸,关于浮点算术的一些最佳实践是什么? 首先使用上面代码的一些变体将double转换为int ,然后将其转换回来是否可行?

地板加倍数小数点

我希望将其小数位于可变小数位的二进制位置(在iphone sdk中)。 这里有一些例子向你展示我的意思 NSLog(@”%f”,[self floorMyNumber:34.52462 toPlace:2); // should return 34.52 NSLog(@”%f”,[self floorMyNumber:34.52662 toPlace:2); // should return 34.52 NSLog(@”%f”,[self floorMyNumber:34.52432 toPlace:3); // should return 34.524 NSLog(@”%f”,[self floorMyNumber:34.52462 toPlace:3); // should return 34.524 NSLog(@”%f”,[self floorMyNumber:34.12462 toPlace:0); // should return 34.0 NSLog(@”%f”,[self floorMyNumber:34.92462 toPlace:0); // should return 34.0 任何想法如何做到这一点? 解 -(double)floorNumberByDecimalPlace:(float)number place:(int)place { return (double)((unsigned int)(number * (double)pow(10.0,(double)place))) […]

printf参数相互影响

我有以下代码: double dtemp = (some value) printf(“\n***Hand washing: cost per kg/item: %.2f, cost: %.2f.\n”, 5, dtemp); 打印出来: ***洗手:每公斤/件的成本:0.00,成本:0.00。 当我将常量5更改为保持5的双变量时,它会打印(根据输入): ***洗手:每公斤/件的成本:5.00,成本:20.00。 为什么常数5会影响dtemp的评估? 我正在使用gcc 4.6.2(MinGW)并在TCC中测试它。

双精度平方根有快速C或C ++标准库函数吗?

我发现自己在打字 double foo=1.0/sqrt(…); 很多,我听说现代处理器有内置的反平方根操作码。 是否存在C或C ++标准库的反平方根函数 使用双精度浮点? 精确到1.0/sqrt(…) ? 和1.0/sqrt(…)的结果一样快还是快?

可以使用双精度来表示64位数而不会丢失精度

我想使用lua(内部仅使用双精度)来表示一个整数,该整数不能在0到2 ^ 64-1之间出现舍入误差,否则会发生可怕的事情。 有可能这样做吗?

如何测试无损双/整数转换?

我有一个双,一个int64_t。 我想知道它们是否保持完全相同的值,如果将一种类型转换为另一种类型,则不会丢失任何信息。 我目前的实施如下: int int64EqualsDouble(int64_t i, double d) { return (d >= INT64_MIN) && (d < INT64_MAX) && (round(d) == d) && (i == (int64_t)d); } 我的问题是:这个实现是否正确? 如果没有,那么什么是正确答案? 为了正确,它必须不留假阳性,不得假阴性。 一些示例输入: int64EqualsDouble(0,0.0)应该返回1 int64EqualsDouble(1,1.0)应该返回1 int64EqualsDouble(0x3FFFFFFFFFFFFFFF,(double)0x3FFFFFFFFFFFFFFF)应该返回0,因为2 ^ 62-1可以用int64_t精确表示,但不能用double表示。 int64EqualsDouble(0x4000000000000000,(double)0x4000000000000000)应返回1,因为2 ^ 62可以在int64_t和double中精确表示。 int64EqualsDouble(INT64_MAX,(double)INT64_MAX)应返回0,因为INT64_MAX不能完全表示为double int64EqualsDouble(…,1.0e100)应该返回0,因为1.0e100不能完全表示为int64_t。

scanf正在收集错误的输入

#include int main(void) { double c; scanf(“%f”, &c); printf(“%f”, c); } 这是我试图编写的程序的一个漏洞,但是我对这个简单的问题也有同样的看法。 当我运行它并输入“1.0”时,它打印出“0.007812”。 我看过几个与我类似的问题,但找不到合适的答案。

为什么函数不会改变变量?

在这段代码中我似乎得到零,我不太熟悉为什么我不能用我创建的函数改变变量长度。 任何帮助都可能有用。 #include double get_length(double a); int main(int argc, char* argv[]) { double length = 0; get_length(length); printf(“%lf”, length); return 0; } double get_length(double a) { printf(“What is the rectangle’s length?\n”); scanf(“%lf”, &a); return a; } 打印时,返回0.0000

Scanf for double在Dev C ++中不起作用

我遇到浮点数问题。 我觉得这里有些事情发生了冲突。 输出是: 我的代码: #include int main(){ double y; printf(“enter a decimal number: “); scanf(“%f”, &y); printf(“%f\n”, y); fflush(stdin); getchar(); return 0; } 我正在使用Dev C ++ 4.9.9.2,首先,如果以前没有读过,我必须多次刷回回车。 所以,如果有任何替代方案,那么告诉我。 其次输出是这个…