没有 float 或 double 变量的浮点异常
Floating Point Exception with no float or double variable
我遇到以下代码的问题 "Floating point exception, core dumped" 但我什至没有一个 float 或 double 变量。通过检查 printf,我观察到它发生在 isPrimeFunction 中,在那里执行卡住。
/*
PROBLEM 3
The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143 ?
*/
#include <stdio.h>
typedef int bool;
const bool true=1;
const bool false=0;
bool isPrime(long long int number) {
long long int i;
for(i=2; i < (number/2); i++) {
if(number%i == 0) {
return false;
}
}
return true;
}
int main() {
long long int number, largest;
number=600851475143;
largest=0;
int i;
for(i=1; i <= (number/2); i++) {
if((number % i) == 0) {
if(isPrime(i) == true) {
largest=i;
}
}
}
if(largest != 0)
printf("Largest prime factor is: %lli\n", largest);
else
printf("There is no prime factor of the number.\n");
return 0;
}
在 main
中,您的 i
是一个整数,因此很可能不够大,无法容纳 number/2
这意味着 [= 很可能(尽管这是未定义的行为) 11=] 将换行并最终为 0。 number % i
然后将导致除以零,这是另一个未定义的行为,但很可能是为什么您的系统生成浮点异常(我的会)。
N.B。这不是一个很好的算法。数一数你会循环多少次。有一个像 6000 亿这样的数字,即使它是质数,并且您永远不会在循环内触发 isPrime
测试,您正在查看接近一个小时的运行时间。每次您在循环中进行测试时,都会大大增加运行时间。
我遇到以下代码的问题 "Floating point exception, core dumped" 但我什至没有一个 float 或 double 变量。通过检查 printf,我观察到它发生在 isPrimeFunction 中,在那里执行卡住。
/*
PROBLEM 3
The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143 ?
*/
#include <stdio.h>
typedef int bool;
const bool true=1;
const bool false=0;
bool isPrime(long long int number) {
long long int i;
for(i=2; i < (number/2); i++) {
if(number%i == 0) {
return false;
}
}
return true;
}
int main() {
long long int number, largest;
number=600851475143;
largest=0;
int i;
for(i=1; i <= (number/2); i++) {
if((number % i) == 0) {
if(isPrime(i) == true) {
largest=i;
}
}
}
if(largest != 0)
printf("Largest prime factor is: %lli\n", largest);
else
printf("There is no prime factor of the number.\n");
return 0;
}
在 main
中,您的 i
是一个整数,因此很可能不够大,无法容纳 number/2
这意味着 [= 很可能(尽管这是未定义的行为) 11=] 将换行并最终为 0。 number % i
然后将导致除以零,这是另一个未定义的行为,但很可能是为什么您的系统生成浮点异常(我的会)。
N.B。这不是一个很好的算法。数一数你会循环多少次。有一个像 6000 亿这样的数字,即使它是质数,并且您永远不会在循环内触发 isPrime
测试,您正在查看接近一个小时的运行时间。每次您在循环中进行测试时,都会大大增加运行时间。