- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我对 C 的一些内置函数有疑问。基本上,我试图创建的是我自己的 colpitts 振荡器计算器,它按顺序采用以下输入作为参数:电感值、电容器值、第二个电容器值。
输入可以以 F 或 H 结尾,也可以有前缀 p、m、n 和 u 来表示 pico、milli、nano 和 micro。如果数字太大,输出也会被格式化,并附加一个后缀。
插入调试 printf 语句后,我的程序出现的问题是数字转换不正确。
我按以下顺序使用了测试参数:
1p 2pF 3F
这是我的初始输出:
DEBUG Init proc: 1p
DEBUG post proc: 0.000000
DEBUG Init proc: 2p
DEBUG post proc: 0.000000
DEBUG Init proc: 3
DEBUG post proc: 3.000000
但是除了最后一行之外,DEBUG post proc 行是错误的。
我想看看:
DEBUG Init proc: 1p
DEBUG post proc: 0.000000000001
DEBUG Init proc: 2p
DEBUG post proc: 0.000000000002
DEBUG Init proc: 3
DEBUG post proc: 3.000000
这是我的代码:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main(int argc,char* argv[]){
if (argc < 4){
printf("Need 3 args: L, C1, C2. %d supplied\n",argc-1);return -1;
}
long double nums[4],f;long isnum;
int n=0;
for (n=1;n<4;n++){
//process each arg
char *p=argv[n];while(*p != '\0'){p++;};p--;
//strip last character if it's F, f, H, or h
if (*p=='F' || *p=='f' || *p=='H' || *p=='h'){*p='\0';p--;}
printf("DEBUG Init proc: %s\n",argv[n]);
switch (*p){
case '0': //do nothing if new last character is a number
break;
case 'p': //convert picounit to unit
*p='\0';
nums[n]=strtoll(argv[n],NULL,10)/1000000000000ULL;
break;
case 'n': //convert nanounit to unit
*p='\0';
nums[n]=strtoll(argv[n],NULL,10)/1000000000ULL;
break;
case 'u'://convert microunit to unit
*p='\0';
nums[n]=strtoll(argv[n],NULL,10)/1000000ULL;
break;
case 'm'://convert milliunit to unit
*p='\0';
nums[n]=strtoll(argv[n],NULL,10)/1000ULL;
break;
default: //do nothing if new last character is a number from 1 to 9 or print error if it isn't u,m,n or p.
isnum=strtol(p,NULL,10);
if (isnum < 1 || isnum > 9 || isnum=='\0'){
printf("Number %d is in bad format. Use suffix of either: uH mH nH pH uF mF nF pF\n",n);
return -1;
}
nums[n]=strtoll(argv[n],NULL,10);
}
printf("DEBUG post proc: %Lf\n",nums[n]);
}
printf("Input values: %Lf,%Lf,%Lf\n",nums[1],nums[2],nums[3]);
//calculate frequency
f=1/(2*3.14159)*sqrt(nums[1]*((nums[2]*nums[3])/(nums[2]+nums[3])));
char suf=' '; //prepare suffix to display frequency in user friendly format
if (f > 1000000){f=f/1000000;suf='M';} //convert to Mhz if f > 1000000
if (suf=='\0' && f > 1000){f=f/1000;suf='K';}
printf("Frequency = %Lf %c hz\n",f,suf);
return 0;
}
由于我只有一个 32 位处理器可以使用,所以我觉得我对此的回答是有限的。我该怎么做才能纠正这个问题?
最佳答案
首先 - 正如 Evert 所提到的 - 你正在进行整数除法。编写 nums[n]=strtoll(argv[n],NULL,10)/(1000000000000.0);
或 nums[n]=((double)strtoll(argv[n],NULL ,10))/1000000000000ULL
应该可以解决这个问题。
一旦您的数字正确,输出可能四舍五入到小数点后第 6 位:
C99 §7.19.6.1 The
fprintf
function,f
,F
A
double
argument representing a floating-point number is converted to decimal notation in the style[−]ddd.ddd
, where the number of digits after the decimal-point character is equal to the precision specification. If the precision is missing, it is taken as 6; ...
写 printf("DEBUG post proc: %1.15Lf\n",nums[n])
你应该会看到余数。
关于c - strtoll 和 division 没有返回正确的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43837469/
考虑以下 Python 2 代码 from timeit import default_timer def floor(): for _ in xrange(10**7): 1
每当我运行此代码时,我都会在下面提到的行中得到零除错误。同样,当列表不是用户输入时,也不会发生该错误。错误如何出现,我该如何解决? n=int(input("Dimension of the coef
Find a regular expression which represents strings made of {a, b}, where number of a's is divisible
我有一些测试套件中的MXL文件,其中第一个度量表示除法为8(即每四分音符8个单位)。 措施4是3/4的时间,其余时间如下: 24 1 我希望在这里看到。由于24除以8等于
我需要在不使用 %、/ 或 * 的情况下判断一个数字是否能被 3 整除。给出的提示是使用atoi()函数。知道该怎么做吗? 最佳答案 当应用“将所有数字相加,看看是否能除以 3”时,当前答案都集中在十
这个问题已经有答案了: Division of integers returns 0 (2 个回答) 已关闭去年。 我的目标是在 Presto 0.212 中二除两个整数,e。 G。 1/2。天真的方
这个问题已经有答案了: Division of integers returns 0 (2 个回答) 已关闭去年。 我的目标是在 Presto 0.212 中二除两个整数,e。 G。 1/2。天真的方
我正在尝试将十进制数转换为十六进制,内置的十六进制函数限制为 8 个字符,因此我不得不编写自己的函数,但是 VBScript 似乎将数字四舍五入到小数点后两位。 例如。 106681252129194
也许这是在这里问的错误问题,但我很好奇。我知道许多语言在被要求除以 0 时只会爆炸并失败,但是是否有任何编程语言可以智能地处理这个不可能的总和 - 如果是这样,它们会做什么?他们是继续处理,将 350
机器以一元形式取2个自然数(a, b)作为输入,输出整数商和整数除法的余数a/b。 磁带上的初始和最终状态是什么?功能图会是什么样子? 提前致谢。 最佳答案 此处使用的设计如下: 从表示 a 的磁带部
我想检查一个浮点值是否“接近”32 的倍数。例如64.1“几乎”可以被 32 整除,63.9 也是如此。 现在我正在这样做: #define NEARLY_DIVISIBLE 0.1f float o
我正在尝试将间隔*[a,b]*除以保存在浮点变量数组中的*npt*点。 我需要 *a* 和 *b* 始终出现在最终数组中,并且 *npt* 可以根据我的需要进行变化。 我尝试过: delta = (b
这个问题在这里已经有了答案: My computer thinks that signed int is smaller then -1? [duplicate] (3 个答案) sizeof()
在 C 中,如果我想将 int 除以 2,x%2应该像 (x%10)% 2 一样快 因为一个好的编译器只会看最后一点。但是在具有无限精度算术的语言中呢? 特别是,在 Haskell 中会更快(或者它们
哪个版本更快?x * 0.5 or x / 2 前段时间我在大学里有一门叫做计算机系统的类(class)。从那时起,我记得可以使用相对“简单”的逻辑门来实现两个值的乘法,但除法不是“ native ”
我正在尝试为 bignum 实现长除法。不幸的是,由于嵌入式编程的限制,我无法使用像 GMP 这样的库。此外,我想要学习如何实现它的智力练习。到目前为止,我已经使用任意长度的字节数组完成了加法和乘法(
由于许多 Project Euler 问题需要您多次进行可分性检查,因此我一直试图在 ZX81 中找出执行此任务的最快方法。基本的。 到目前为止,我已经比较过 (N/D)至 INT(N/D)检查,是否
运行代码后,我收到一个ZeroDivisionError!有人可以解释发生了什么吗?寻找bscore和gscore输入的平均值 bscore = 0 gscore = 0 bcount = 0 gco
我正在尝试用 Javascript 创建一个逻辑开关。目的是创建一个 Javascript 函数,该函数可用于触发按钮单击事件并打开或关闭特定的日历源。当您第一次单击按钮时,它应该加载日历提要,当第二
我正在尝试为bignums 实现长除法。不幸的是,由于嵌入式编程的限制,我无法使用像 GMP 这样的库。此外,我想要学习如何实现它的智力练习。到目前为止,我已经使用任意长度的字节数组完成了加法和乘法(
我是一名优秀的程序员,十分优秀!